【问题标题】:Original FuelPHP Auth Driver原装 FuelPHP 认证驱动程序
【发布时间】:2016-02-01 02:56:41
【问题描述】:

我正在创建扩展 Auth_Login_Driver 的原始 Auth_Login_MyDriver。 我实现了这样的登录方法。

public function login($email,$pass){
}

但我收到以下错误。

Declaration of Auth\Auth_Login_Mydriver::login() must be compatible with Auth\Auth_Login_Driver::login()

我明白原因。我必须声明 login()。

但 SimpleAuth 包声明如下。

public function login($username_or_email = '', $password = ''){}

如何声明带参数的登录方法?

FuelPHP:1.7.3 PHP:5.6.13

【问题讨论】:

  • 如何正确拼写“function”?
  • 猛禽,谢谢我修好了。
  • 我会调查一下,但你能告诉我们更多关于你想要达到的目标吗?如果您的方法不可行,我们或许可以提供替代解决方案。

标签: php abstract-class fuelphp


【解决方案1】:

我给你两个答案,一个回答你只希望参数为$email$password的情况。另一个告诉如何创建具有不同参数的登录方法,因为如果您想实现这一点,则会引发相同的错误。 (起初我不确定你的问题是什么)。

你的问题:

您的问题是这两个签名不兼容。这是因为您没有为 login 函数中的参数提供默认值。你可以简单地替换它来解决它

function login($email, $password)

function login($email = '', $password = '')

此错误的其他原因可能是您的类型提示与父母的不同。例如:

function login(LoginParams $loginParams)

但您只是尝试使用以下命令覆盖它:

function login($loginParams)

要有不同的参数:

好的,你有两个选择。

首先: 你不扩展Auth\Auth_Login_Driver。这意味着您必须实现Auth\Auth_Login_Driver 的所有必要功能。显然,如果你需要一个非常相似的功能,你的大部分代码都会有一些重复,这应该避免。

第二: 你没有将你的函数命名为login。这意味着您的课程仍将公开login($username, $password) 函数,您很可能不想使用该函数。在您的位置,我只需在login 中添加RuntimeException。然后你可以像这样声明另一个函数:

function login_with_third_param($username = '', $password = '', $third_param = '') {
}

当使用这个驱动时,你可以说:

Auth::login_with_third_param('joe', 'secret', 'spoon');

它会起作用的。

【讨论】:

  • 太棒了!非常感谢。我需要默认值。
【解决方案2】:

如果你使用创建控制器 auth.php,登录方法声明是这样的。 你的方法必须是action_login($email=null,$pass=null){}

class Controller_Auth extends \Controller_Template
{

       function action_login($email=null,$pass=null)
            {}
}

【讨论】:

  • 感谢您的回答。但我正在创建一个扩展 Auth_Login_Driver 的驱动程序。
  • 你在 auth.php 中的命名空间是什么?
  • 现在我在Task中测试。所以,命名空间是 Fuel\Tasks
  • task.php 在类/控制器内部吗?
  • 这是语言限制。在 PHP 中,您不能拥有与父函数同名但签名不同的函数。所以如果你改变参数(参数的数量,或者它们的类型提示),你会得到这个错误。
猜你喜欢
  • 1970-01-01
  • 2010-12-29
  • 2012-06-28
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多