edo1z blog

プログラミングなどに関するブログです

cakePHP2.3 Filebinderのパスをベタうちしない

アイテムを登録するときにアイテムの画像も一緒に登録したいときはFilebinderの出番なのですが、Filebinderはモデルにパスを登録するのですが、ベタうちしたくない場合(ベースとなるパスをコントローラーからもモデルからも参照できる1カ所に書きたい場合)は下記のようにやります。 ベースとなるパスは、/Applications/XAMPP/xamppfiles/caketest/とします。

パスはパーミッションを変更しないとFilebinderがフォルダやファイルを作成しようと思ってもできない可能性があります。 下記のような感じでパーミッションを変えておきます。

$ sudo chmod -R 707 caketest

まず、bootstrap.phpに下記のようにベースとなるパスを追加します。

Configure::write('file_path','/Applications/XAMPP/xamppfiles/caketest/');

次にモデルを下記のようにします。

class Item extends AppModel {
    public $actsAs = array('Filebinder.Bindable');
    public $bindFields = array();

    function __construct(){
        parent::__construct();
        $this->bindFields[] = array(
            'field' => 'photo',
            'tmpPath' => Configure::read('file_path') . 'tmp',
            'filePath' => Configure::read('file_path') . 'item_images/',
        );
    }

以上です。

これで、開発環境と本番環境でパスが違う場合の最小限の変更ですむと思います。