yii ...的声明必须与

mkshixfv  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(135)

我正在使用这个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'],
        ]
}
a14dhokn

a14dhokn1#

从您所描述的内容来看,在调用connect()方法时,usuario似乎使用DI容器创建User类示例。
当你重写它的时候,你必须遵守一条规则:**前提条件不能在子类型中被加强。**这意味着你不能用原始方法的子类作为参数来输入提示参数。你的connect方法定义必须和你在问题中发布的一样:

public function connect(\Da\User\Model\User $user)

但正因为如此,依赖注入器在调用connect()方法时创建了Da\User\Model\User的示例。因此,您错过的是设置DI容器在它应该创建Da\User\Model\User的示例时创建app\models\user\Model\User的示例,如下所示:

'container' => [
    'definitions' => [
        Da\User\Model\User::class => app\models\user\Model\User::class,
    ],
],

当然,要实现这一点,app\models\user\Model\User类必须扩展Da\User\Model\User类。
有一个完整的例子如何覆盖usuario的用户模型在usuario's documentation

相关问题