原始FuelPHP Auth驱动程序

时间:2016-02-01 02:56:41

标签: php abstract-class fuelphp

我正在创建扩展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()

我理解原因。我必须声明登录()。

但SimpleAuth包声明如下。

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

如何使用参数声明登录方法?

FuelPHP:1.7.3 PHP:5.6.13

2 个答案:

答案 0 :(得分:3)

我给你两个答案,一个回答你只希望参数为$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)功能,这很可能是您不想使用的功能。在您的位置,我只是在RuntimeException中抛出login。然后你可以声明另一个这样的函数:

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

使用此驱动程序时,您只需说:

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

它会工作。

答案 1 :(得分:0)

如果您使用create controller auth.php,则登录方法声明如下。 您的方法必须为action_login($email=null,$pass=null){}

class Controller_Auth extends \Controller_Template
{

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

see below