php – 如何在行为配置中使用模型属性值Yii

我想创建
ImageBehavior来上传和保存图像.我的行为有两个字段:imagePath和imageField.在我的模型中,我写道:

public function behaviors(){
    return array(
        'imageBehavior' => array(
            'class' => 'ImageBehavior',
            'imagePath' => 'images/avatar-pics/'.$this->user->username,
            'imageField' => 'avatar',
        ),
    );
}

但这不起作用 – 我收到路径 –

images/avatar-pics//image.png

什么解决方案?在行为字段imageFolder中创建并添加到config’imageFolder’=> ‘用户>用户名’?谢谢.

最佳答案 作为建议:

更改您使用行为的方式并向模型添加一些代码.看一下下面的例子:

例如,您的行为:

class ImageBehavior extends CBehavior {
    public $imagePath;
    public $imageField;
    public function getImagePath() {
        return $this->imagePath;
    }
}

你的型号:

class TestModel extends CFormModel {

    private $imagePath = '/home/x/y';

    public function setImagePath($imagePath) {

        $this->imagePath = $imagePath;
        $this->attachBehaviors(array(
            array(
                'class' => 'ImageBehavior',
                'imagePath' => $this->imagePath
            )
        ));
    }

    public function init() {
        $this->setImagePath($this->imagePath);
        parent::init();
    }

}

现在,看看测试和结果:

$model=new TestModel();
CVarDumper::dump($model->getImagePath()); //output: /home/x/y

$model->setImagePath('/home/x/path2');
CVarDumper::dump($model->getImagePath()); //output: /home/x/path2

$model->setImagePath('/home/x/path3');
CVarDumper::dump($model->getImagePath()); //output: /home/x/path3

通过这种方式,如果您没有设置任何imagePath,它将使用模型的默认值.在前面,每次更改imagePath时,您的路径都会改变您的行为.

注意:这只是一个建议.通过这种方式,您可以自定义setImagePath方法以从任何位置获取值(另一个模型,会话等等).

点赞