ざきのメモ

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 のフィールドにはファイル名が入っています。

参考

Copyright © 2017-2021 Ryo Okazaki, all rights reserved.