yii - ... 的声明必须与
问题描述
我正在为我的用户模型使用这个 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'],
]
}
解决方案
根据您的描述,usuario在调用方法User
时似乎正在使用 DI 容器创建类实例。connect()
覆盖它时,您必须遵循不能在子类型中加强先决条件的规则。这意味着您不能使用原始方法用作其参数的子类来键入参数。您的连接方法定义必须类似于您在问题中发布的内容:
public function connect(\Da\User\Model\User $user)
但正因为如此,依赖注入器Da\User\Model\User
在调用connect()
方法时创建了一个实例。所以,你错过的是设置 DI 容器来创建实例,app\models\user\Model\User
只要它应该创建这样的实例Da\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 的用户模型
推荐阅读
- python - Discord 嵌入图像未加载(Replit,Python)
- php - 如何通过dns将子域指向其他域?
- javascript - server-info 命令未显示人和机器人成员 discord.js
- javascript - 在 setInterval() 中,一段代码应该运行一次
- python - 如何在 Python 中处理 mySQL 异常?
- c# - 按名称创建与 xaml 中的矩形元素关联的矩形数组
- ios - 无法读取传入的深层链接 iOS Swift
- google-cloud-platform - 私有虚拟机和权限中的 gloud os-login iap - 错误:(gcloud.beta.compute.ssh)
- matrix - CNN 的混淆矩阵
- ios - 使用语音框架和 contextualStrings 检测填充词