CakePHP3の画像、ファイルアップロードプラグインUpload Plugin 3.0の設置解説・その1
2017/11/26
CakePHP3のファイルアップロードプラグインUpload Plugin 3.0の設置
CakePHP3でファイルのアップロードを行う処理を作成します。
今回は、オーソドックスなプラグインである「Upload Plugin 3.0」を設置する方法の解説です。
Upload Plugin 3.0の動作環境
最初に「Upload Plugin 3.0」を利用するために必要な環境を書いておきます。
- CakePHP3.x
- PHP 5.4以上
- PHP Imagick 拡張 or PHP GD 拡張
CakePHP3に導入するための記事として書いていますので、最初の 2項目は問題ないと思います。
3項目目の「PHP Imagick 拡張 or PHP GD 拡張」は、レンタルサーバでは利用できない場合もありますので、確認が必要です。
ただ、この機能はサムネイルを作成する際に必要となる機能ですので、サムネイルを作成しない場合はなくても問題ありません。
ファイルアップロードプラグイン Upload Plugin 3.0関連記事
この記事は、3記事で構成されています。
まず、この記事では、Upload Plugin 3.0の基本的な設置方法を解説します。
CakePHP3の画像、ファイルアップロードプラグインUpload Plugin 3.0の設置解説・その1
続いて、下記の記事では、Upload Plugin 3.0を実運用に耐えうるように、ファイルのバリデーションや、アップロードするファイルを複数にする安倍などのカスタマイズする方法を解説します。
CakePHP3のUpload Plugin 3.0をバリデーションなど実運用向けのカスタマイズ方法解説・その2
最後の記事では、2記事までで解説した画像を新規登録でアップロードする処理に続く処理として、記事を更新する際の処理、および、登録した画像を表示する処理について解説します。
CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3
ちなみに、ファイルのアップロード処理は、PHP自体がサポートしていますので、プラグインを使わなくても比較的簡単に実装することができます。
その CakePHP3でファイルのアップロード処理を自作した際の、ソースコード付きの解説記事を下記で書いていますので合わせて参考にしてみてください。
CakePHP3でファイルのアップロード処理を自作・解説付き・その1
CakePHP3で画像・ファイルのアップロード処理を自作・解説付き・その2
ファイルアップロード処理の理解のために読んでみるのもいいかもしれません。
CakePHP3にファイルアップロードプラグイン Upload Plugin 3.0を設置する手順
1.「josegonzalez/cakephp-upload」のインストール
まずはプラグインである「josegonzalez/cakephp-upload」をインストールします。
コンソールから「composer require josegonzalez/cakephp-upload」を実行します。
下記は、Windowsの XAMPP環境でコマンドを実行する際の例です。
1 |
C:\xampp\htdocs\cake> composer require josegonzalez/cakephp-upload |
Composerの使い方については「CakePHP3でcomposerを利用してライブラリ・プラグインをインストールする方法」を参考にしてください。
2.ロードする設定を「config/bootstrap.php」に記述
続いてプラグインをロードする設定を「config/bootstrap.php」に記述します。
CakePHP3のコマンドを実行して「config/bootstrap.php」に記述する方法
Upload Plugin 3.0をインストールするために、コマンドを実行しましたので、その続きとしてコマンドで「Josegonzalez/Upload」をロードする設定を「config/bootstrap.php」に記述するコマンドを実行する方法です。
コマンドプロンプトから「bin/cake plugin load Josegonzalez/Upload」を実行します。
下記は、Windowsの XAMPP環境でコマンドを実行する際の例です。
1 |
C:\xampp\htdocs\cake> bin/cake plugin load Josegonzalez/Upload |
1 2 |
'bin' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 |
上記のエラーが出る場合は、パスが設定されていない場合が多くあります。
パスが設定されていない場合は、「/アプリのルート/bin」フォルダの中に入って、「cake plugin load Josegonzalez/Upload」を実行します。
手作業で「config/bootstrap.php」に記述する方法
上記の通り、コマンドを実行する方法もありますが、コマンドを実行して処理される内容を手作業で行う方法もあります。
具体的には、「/config/bootstrap.php」に下記を追記します。
1 |
Plugin::load('Josegonzalez/Upload'); |
追記する場所は、「/config/bootstrap.php」ファイルの一番下など、他のプラグインのロードが記述されているところに並べて書くといいでしょう。
3.画像データを保存するカラムをテーブルに追加
テーブルに、アップロードする画像を保存するカラムを設定します。
(下記のサンプルは、topicsという「お知らせ」を管理するテーブルの想定で、10行目~13行目が対象のカラムになります。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
mysql> show columns from topics; +--------------------+------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------------+------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | topics_date | date | YES | | NULL | | | title | text | YES | | NULL | | | body | text | YES | | NULL | | | link_url | text | YES | | NULL | | | image | text | YES | | NULL | | | dir | text | YES | | NULL | | | type | text | YES | | NULL | | | size | int(11) | YES | | NULL | | | publish_flag | tinyint(4) | YES | | NULL | | | publish_date | datetime | YES | | NULL | | | created | datetime | NO | | NULL | | | modified | datetime | NO | | NULL | | +--------------------+------------+------+-----+---------+----------------+ |
「Upload Plugin 3.0」で保存することができる値は「ファイル名」「保存フォルダのパス」「ファイルのタイプ」「ファイルのサイズ」です。
それを、それぞれ「image」「dir」「type」「size」として登録します。
型は「image」「dir」「type」が文字列型で、「size」が数値型です。
プラグインを制作した(であろう)方のブログでは、文字列型は「varchar(255)」を使用していましたが、文字列型であればなんでも問題ありません。ただ、長さを指定するなら「255」が無難であろうと思います。
sizeの数値型も decimalでも問題ありません。ファイルサイズが byte単位で保存される項目ですので、想定しているファイルの容量によって適切な型を選択しましょう。
また、登録できる項目は「ファイル名」「保存フォルダのパス」「ファイルのタイプ」「ファイルのサイズ」と書きましたが、必要な項目だけ設定すれば OKです。
普通は「ファイル名」「保存フォルダのパス」があれば足りるでしょう。
4.ファイルの保存先を作成
アップロードされたファイルが保存される場所を用意します。
デフォルトの設定では、下記の場所に保存されます。
/ webroot / files / { テーブル名 } / { フィールド名 }
保存するフォルダがない場合は、自動的に生成されますので、Windowsの XAMPP環境では事前に作成しなくても全く問題ありません。
ですが、Linuxのようにフォルダのパーミッションが管理されている OSの場合は、フォルダを作ってパーミッションの設定を確認しておく方がいいでしょう。
5.モデルクラスにプラグインを利用する処理を追記
モデルのクラスにプラグインが利用する処理を追記します。
対象となるファイルは、以下の通りです。
/src/Model/Table/TopicsTable.php
記述する内容は以下の通りです。(下記の 9行目~12行目です。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
public function initialize(array $config) { parent::initialize($config); $this->setTable('topics'); $this->setDisplayField('title'); $this->setPrimaryKey('id'); // Upload Plugin $this->addBehavior('Josegonzalez/Upload.Upload', [ 'image' => [], ]); } |
6.フォームテンプレートにファイルアップロード処理を追記
フォームタグの createに「enctype」「type」を追記
フォームタグ(<form>)を生成する createに「type」を追加します。
1 2 3 |
<?= $this->Form->create($topic, ['enctype' => 'multipart/form-data']); ?> または <?= $this->Form->create($topic, ['type' => 'file']); ?> |
フォームタグの inputに「type」を追記
続けて、ファイルを入力する項目にも「type」を追加します。
1 |
echo $this->Form->control('image',["type"=>"file"]); |
フォームヘルパーの使い方に関しては、「CakePHP3のForm Helperの使い方のまとめ」に記事を書いていますので、参考にしてください。
これで、ファイルのアップロードができるようになります。
Upload Plugin 3.0の設定時のエラーについて
Upload Plugin 3.0を設定する際に発生するエラーについて解説します。
「Missing Plugin」と表示される
Upload Plugin 3.0をインストールしたにもかかわらず、画面を表示すると下記の様に「Missing Plugin」と表示される場合の対処方法です。
1 2 3 4 5 6 |
Missing Plugin Cake\Core\Exception\MissingPluginException Error: The application is trying to load a file from the Josegonzalez/Upload plugin. Make sure your plugin Josegonzalez/Upload is in the C:\xampp\htdocs\cake\plugins\ directory and was loaded. |
「インストールした Upload Plugin 3.0が正しく処理されず、Upload Plugin 3.0を見つけることができない」というエラーです。
対処方法は、改めて「Upload Plugin 3.0」をインストールし直すと問題は解決しました。
CakePHP3の関連記事
CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールするCakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3のInsert On Duplicate Key Update(upsert)構文を解説・バルク処理も
CakePHP3の1対多での連携を中間テーブルを使った多対多の連携に変更するときの手順
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でパンくずの指定は HTMLヘルパーを使って指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
その他の「CakePHP3」に関する記事一覧
GoogleAdwords
GoogleAdwords
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
-
CakePHP5系でDeprecatedを回避しfindListでキーと値のカラムを指定して取得する方法
CakePHP4のfindListでキーと値のカラムを指定してテーブルにアクセスする方法がCakePHP5では「Deprecated(非推奨)」となった。推奨の記述方法を解説。
-
-
Google Analytics APIを CakePHP3で動かしてレポートデータを取得する方法の解説
CakePHP3で Google Analytics APIからレポートデータを取得する処理の解説。PHPのサンプルソースをCakePHP3で動くように改造。加えて、ディメンションやメトリックスを条件に設定する方法なども。
-
-
CakePHPのバリデーションを入力値・項目の条件によって変える方法を解説
入力された値によってバリデーション(入力チェック)の内容を切り替える。その処理をCakePHPで実装する方法を解説。条件ごとに unset関数を使ってバリデーションを削除する、という方法を採る。
-
-
CakePHP3でCookieを保存、呼び出し、削除の操作・CakePHP3.7対応
CakePHP3.7でCookieを保存、取り出し、削除する方法を解説。CakePHP3でのCookieの取り扱いはバージョンごとに変更されるため、環境に合わせた方法を探す必要がある。
-
-
CakePHP 2.3でファイルをアップロード・その2 ファイル名を乱数で設定
CakePHPのアップロードするファイル名を乱数で変更しセキュリティを高める方法を解説。
-
-
CakePHP3でDocumentRootやtmp、webroot、logsなどのフォルダへのパスの定数
CakePHP3で特定フォルダのパスの定数を解説。root、DocumentRoot、app、config、webroot、tests、tmp、cache、vendor、コア、コアの srcが設定済み。realpath()関数を使うと柔軟なパス指定が可能。
-
-
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4でキャッシュをクリアするコマンドcake cache clear_allでPermission deniedのエラーが出るのはcakeにパーミッションが足りないとき。その対処方法を解説。
-
-
CakePHP4のCakeDC/Usersの Usersへの接続、バリデーションのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。CakePHP4で使う場合のUsersのカスタマイズとして入力項目のバリデーションの変更を、プラグインのファイルは触らずオーバーライドにより実装する方法を解説する。
-
-
CakePHP 2.3 Search Pluginで検索処理 その6ORDER、sortソートの機能
CakePHPの検索プラグイン Search Pluginの検索処理の中で order、ソートについての解説です。
-
-
CakePHP4 でコマンドプログラム(シェルプログラム)を作成する方法解説
CakePHP4でバッチ処理を行うためのコマンド・シェルの実装方法について解説。bakeでテンプレートファイルを作成し、「execute()」に処理を記述する方法を解説。