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
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!
関連記事
-
CakePHP3でPHPExcelを使ってエクセルファイルを生成、出力する方法
CakePHP3でPHPExcelを利用してエクセルを編集、出力するサンプルソース+解説。PHPExcelのインストール方法の解説からファイル保存とダウンロードの方法なども解説。
-
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介
CakePHP3でレコードを追加、更新(Insert、Update)する記述方法を解説。1件ずつ処理、全件をまとめて処理、条件に該当する複数件のレコードを処理方法をサンプルコードを用いて解説。
-
CakePHP3で他のテーブルのマスタテーブルからセレクトボックス(プルダウンリスト)を作る
他のテーブルのマスタのレコードからプルダウンリストを作成し、選択できるようにするサンプルプログラムと解説。ORMの設定によりデータベースの値を取得し、配列を作成し optionsに与える。
-
CakePHP3のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつテンプレートファイルがどこにあるか、設定情報ファイルがどこにあるか、を説明しつつカスタマイズの方法を解説します。
-
CakePHP3のデバッグキット(DebugKit)を強制的に有効、無効に変更する方法
CakePHP3に付属しているデバッグのためのツール、デバッグキットを強制的に有効化、無効化する方法を解説。初期設定では開発環境としてありそうなドメインの場合のみ有効になるように設定されている。
-
CakePHP3のメール送信の処理・テンプレート使用・添付ファイル送信も解説
CakePHP3からメールを送信する方法解説。基本的な記述方法を基にして、テンプレートを使う方法、ファイルを添付する方法へと拡張しながら解説。
-
CakePHPで favicon.icoやapple-touch-icon-144-precomposed.pngが could not be foundのエラーが出るときの対処方法
CakePHPで「CakeDC/Users」などルーティングを行うプラグインを利用するときに、favicon.icoやapple-touch-icon-144-precomposed.pngがNotFoundエラーになることがある。その対処方法の解説。
-
CakePHP3でQRコードを作成、表示するライブラリ「cakePHP-QR-Code-Helper」
CakePHPでQRコードを生成するライブラリ「cakePHP-QR-Code-Helper」の紹介。GDライブラリのインストールも必要ないHelperとして提供されているため、ファイルを設置すればすぐに使用可能。
-
VirtualBoxにCakePHP3を設置。必要なCentOS、Apache、PHP、MySQL、Composerをインストールし設定する
VirtualBoxにCentOS、Apache、MySQL、PHPをインストールするところから初めてCakePHP3の開発環境を構築する手順を詳細解説。この記事1つで全ての設定が完了する。
-
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3でajaxを利用する処理の実装方法を解説。プルダウンを変更するとデータベースの値を取得し検索結果の内容を変更するというような処理を想定。CakePHP3.6以降の CSRF対策対応済。