我想要做的就是在保存之前从控制器更改我的Upload模型的$ actsAs数组中的值('path')。
我提出的唯一方法是卸载行为,然后加载它的所有设置。
仅仅改变路径似乎有些过分。有更简单/更好的方法吗?
$this->loadModel('Upload');
$this->Upload->Behaviors->unload('Upload.Upload');
$this->Upload->Behaviors->load('Upload.Upload', array(
'photo' => array(
'thumbnailSizes' => array(
'xvga' => '1024x768',
'vga' => '640x480',
'thumb' => '80x80',
),
'thumbnailMethod' => 'php',
'thumbnailQuality' => '80',
'pathMethod'=>'random',
'path' => '{ROOT}webroot{DS}uploads{DS}test{DS}{field}{DS}',
'maxSize' => '5242880', //5MB
'mimetypes' => array('image/jpeg', 'image/png', 'image/gif', 'image/bmp'),
'extensions' => array('jpg', 'gif', 'png', 'bmp'),
),
));
if($this->Upload->save($this->request->data)) {
//...
答案 0 :(得分:0)
从源头看,我认为uploadSettings()
方法正是您所需要的:
$this->Upload->uploadSettings('photo', 'path', 'YOUR_PATH');
答案 1 :(得分:0)
当您将配置加载到现有行为上时,BehaviorCollection应该合并配置,因此您不需要重新包含所有其他配置。实际上,您也不需要卸载它。
$this->Upload->Behaviors->load('Upload.Upload', array(
'photo' => array(
'path' => '{ROOT}webroot{DS}uploads{DS}test{DS}{field}{DS}'
)
));
由于合并使用array_merge
代替array_merge_recursive
,因此对您无效。我把它包含在这里是因为它可能是首选的方法,尽管你使用的行为使用了一个配置数组,而Cake不会按照你想要的方式处理它。
或者,您可以在构造模型时简单地修改$actsAs
变量,这将使其正确设置。
public function __construct($id = false, $table = null, $ds = null) {
// 2 lines for readability
$this->actsAs['Upload.Upload']['photo']['path'] =
'{ROOT}webroot{DS}uploads{DS}test{DS}{field}{DS}';
return parent::__construct($id, $table, $ds);
}