2012-05-08 4 views
3

私がしたいことは、保存する前にコントローラーからアップロードモデルの$ 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

面白い - その1は、おそらく負荷を使用する必要があります - あなたの質問を通じて、私は、添付()と私は常に非推奨しているように見える(またはBCのための少なくとものみ利用可能)を使用してきた()メソッドを切り離すことが判明()とunload()を実行します。 – mark

答えて

0

私はuploadSettings()方法は、あなたが探しているものだと思うソースを見てから:

$this->Upload->uploadSettings('photo', 'path', 'YOUR_PATH'); 
+0

プラグインのメソッドを使わずに$ actsAs変数を変更する方法はありますか? – Dave

0

既存の振る舞いの上にロードするときBehaviorCollectionは、コンフィギュレーションをマージしなければならないので、あなたはshouldn他のすべての構成を取り込む必要はありません。実際に、アンロードする必要はありません。

$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); 
} 
+0

私は最初の方法を無視しました。 'Notice(8):オーバーロードされたプロパティの間接的な変更Upload :: $ Behaviorは効果がありません[ROOT/cms.daveschwan.com/Controller/ArticleDatasController.php、line 44]' – Dave

+0

は 'Behaviors '(複数)。 – jeremyharris

+0

Behaviorsを複数に変更した後: 'Notice(8):オーバーロードされたプロパティの間接的な変更BehaviorCollection :: $ settingsは効果がありません[ROOT/cms.daveschwan.com/Controller/ArticleDatasController.php、行44' – Dave

関連する問題