3

私がやりたいことは、保存する前にコントローラーからアップロード モデルの $actsAs 配列の値 (「パス」) を変更することだけです。

私が思いついた唯一の方法は、ビヘイビアをアンロードしてから、すべての設定をロードすることです。

これは、パスを変更するだけではやり過ぎのようです。より簡単な/より良い方法はありますか?

$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)) {
//...
4

2 に答える 2

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);
}
于 2012-05-08T14:26:58.410 に答える
0

ソースを見ると、uploadSettings()メソッドはあなたが探しているものだと思います:

$this->Upload->uploadSettings('photo', 'path', 'YOUR_PATH');
于 2012-05-08T05:15:52.733 に答える