我正在使用这个Yii2插件为我的用户模型
https://yii2-usuario.readthedocs.io/en/latest/
在我的main.php
中,我有这个。
'user' => [
'class' => Da\User\Module::class,
'enableEmailConfirmation' => true,
'classMap' => [
'User' => 'app\models\user\Model\User',
'SocialNetworkAccount' => 'app\models\user\Model\SocialNetworkAccount',
],
那么在目录models/user/Model
中我有这个
namespace app\models\user\Model;
use Yii;
use app\models\user\Model\User;
use Da\User\Model\SocialNetworkAccount as BaseClass;
class SocialNetworkAccount extends BaseClass
{
public function connect(User $user)
{
return $this->updateAttributes(
[
'username' => null,
'firstname' => $user->firstname,
'lastname' => $user->lastname,
'email' => null,
'code' => null,
'user_id' => $user->id,
]
);
}
}
但是当我进入我的登录页面时,我得到这个错误Declaration of app\models\user\Model\SocialNetworkAccount::connect(app\models\user\Model\User $user) must be compatible with Da\User\Model\SocialNetworkAccount::connect(Da\User\Model\User $user)
我试着按照这里的教程重写类,但没有运气
https://yii2-usuario.readthedocs.io/en/latest/enhancing-and-overriding/overriding-classes/
我做错了什么?谢谢
更新日期:
我试过这个
public function connect(\Da\User\Model\User $user)
我不再得到错误,但现在我注意到它不添加名字和姓氏
在我的用户模型规则中
public function rules()
{
return [
...
[['email', 'firstname', 'lastname'], 'safe'],
]
}
1条答案
按热度按时间a14dhokn1#
从您所描述的内容来看,在调用
connect()
方法时,usuario似乎使用DI容器创建User
类示例。当你重写它的时候,你必须遵守一条规则:**前提条件不能在子类型中被加强。**这意味着你不能用原始方法的子类作为参数来输入提示参数。你的connect方法定义必须和你在问题中发布的一样:
但正因为如此,依赖注入器在调用
connect()
方法时创建了Da\User\Model\User
的示例。因此,您错过的是设置DI容器在它应该创建Da\User\Model\User
的示例时创建app\models\user\Model\User
的示例,如下所示:当然,要实现这一点,
app\models\user\Model\User
类必须扩展Da\User\Model\User
类。有一个完整的例子如何覆盖usuario的用户模型在usuario's documentation