Yii2 - 防止插入行为

时间:2016-03-23 21:27:38

标签: php yii yii2

我在我的模型中有这种行为:

public function behaviors()
    {
        return [
            'styles' => [
                'class' => ImageStyleBehavior::className(),
                'path' => \Yii::getAlias('@webroot') . '/files/userphotos/styles',
                'url' => \Yii::getAlias('@web') . '/files/userphotos/styles',
                'attribute' => 'photo',
                'styles' => [
                    '300x300' => [$this, 'style300'], //can be any valid callable
                    '100x100' => [$this, 'style100'], //can be any valid callable
                ]
            ]
        ];
    }

照片的默认值为 noavatar.png ,当我尝试插入时,出现此错误:

Exception 'Imagine\Exception\RuntimeException' with message 'Unable to open image /var/www/c2c/Care2Shine/www/files/userphotos/' 

我有办法阻止插入操作的行为吗?

2 个答案:

答案 0 :(得分:2)

您可以通过分离来删除特定的命名行为:

$model->detachBehavior('styles');

或者,如果它是唯一的行为,你可以分开所有:

$model->detachBehaviors();

为确保您仅在插入时分离,请检查isNewRecord属性。

答案 1 :(得分:0)

ImageStyleBehavior是否扩展了AttributeBehavior?在这种情况下,您应该可以使用:

public function behaviors()
{
    return [
        [
            'class' => AttributeBehavior::className(),
            'attributes' => [
                ActiveRecord::EVENT_BEFORE_INSERT => 'attribute1',
                ActiveRecord::EVENT_BEFORE_UPDATE => 'attribute2',
             ],
             'value' => function ($event) {
                  return 'some value';
             },
        ],
    ];
}