微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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’=> ‘用户&GT用户名’?谢谢.

解决方法:

作为建议:

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

例如,您的行为:

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方法以从任何位置获取值(另一个模型,会话等等).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐