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