我有一个使用Blameable行为的模型:
class Vehicle extends ActiveRecord
{
// ...
public function behaviors()
{
return [
'blameable' => [
'class' => BlameableBehavior::className(),
'createdByAttribute' => 'UserID',
'updatedByAttribute' => null,
]
];
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
问题是当我尝试Vehicle使用特定的UserID 保存要测试的实例时,Blameable将使用null覆盖该实例(因为没有用户设置为当前登录用户),并且模型的保存将失败。
这段代码说明了到目前为止我是如何解决此问题的:
$owner = $this->createUser(); // creates user with fake data
Yii::$app->user->setIdentity($owner);
$vehicle = $this->createVehicle(); // creates vehicle and relies that the $owner->UserID will be set when vehicle is being saved
Run Code Online (Sandbox Code Playgroud)
但是我不喜欢它,因为尚不清楚为什么要事先设置用户身份。有没有办法禁用Blameable测试中的行为?
只需在方法中分离 BlamableBehavior,createVehicle()如下所示:
public function createVehile()
{
$vehicle = new Vehicle();
$vehicle->detachBehavior('blameable');
// ...
}
Run Code Online (Sandbox Code Playgroud)