我想创建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方法以从任何位置获取值(另一个模型,会话等等).
标签:php,model,yii,behavior 来源: https://codeday.me/bug/20190703/1364564.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。