2018/09/06
CakePHP3 で Upload Plugin 3.0 を使い入力フォームからファイルをアップロードできるようにする
CakePHP3 で入力フォームからファイルをアップロードする機会があったので、その方法を残しておきます。
この方法を使えば画像などもアップロードできます。
環境
- CakePHP 3.6.10
プラグインの準備
今回は Upload Plugin 3.0 というプラグインを使用します。
まず以下のコマンドでプラグインをインストールします。
$ composer require josegonzalez/cakephp-upload
つづいて、プラグインをロードします。
$ bin/cake plugin load Josegonzalez/Upload
これで準備は終了です。
フィールドへのプラグインの適用
今回は例として Map というモデルを用意したとします。
またそのテーブルに、varchar(255) のフィールドを用意してあり、その名前を image とします。
フィールドにプラグインを適用するために、以下のように src/Model/Table/MapsTable.php の initialize 関数内に追記します。
vim src/Model/Table/MapsTable.php
//public function initialize(array $config){
$this->addBehavior('Josegonzalez/Upload.Upload', ['image']);
//}
入力フォームの設定
次に、入力フォームの設定をしましょう。
設定といっても以下のように type を file にするだけです。
<?= $this->Form->create(null, ['type' => 'file']) ?>
<?= $this->Form->control('image', ['type' => 'file']) ?>
これでファイルをアップロードする準備は完了しました!
アップロードしてみてください。
アップロードされたファイルの場所
アップロードされたファイルは、この記事にしたがってモデルやフィールドに名前をつけていると webroot/files/Maps/image/ にあります。
みてみましょう。
$ ls webroot/files/Maps/image/
アップロードしたファイルがあれば成功です。
ちなみに、DB のフィールドにはファイル名が入っています。
参考
- CakeAdvent-2015: Uploading files and images with CakePHP 3
- cakephp3で画像(など)をアップロードするプラグインUpload Plugin 3.0を使ってみる。 | yama-log