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チュートリアルで日付と時刻のDateTimeでエラーが出たときの対処方法
CakePHP3のブックマークチュートリアルには記載ミスもあり、そのまま動かない個所もある。CakePHP3では namespaceを使うようになったので、classを呼び出すときに¥を追加する必要が!
-
-
CakePHP 2.3 デバッグキット(DebugKit)超初心者向けフォロー講座
CakePHP初心者に向けてデバッグキット(DebugKit)のインストール方法、はまりポイントを解説。
-
-
CakePHP 2.3 Search Pluginで検索処理 その1設置方法
CakePHPの検索プラグイン Search Pluginの設置方法と基本的な検索処理の解説です。
-
-
CakePHP3でComposerでインストールできないプラグイン、外部ライブラリを vendorに入れて手動で読み込む方法
CakePHP3にComposerからインストールできないプラグインやライブラリなどを利用する方法、vendorにファイルを設置し、composer.jsonを更新し、それを呼び出す方法を詳細に解説。
-
-
CakePHP3で生の SQLの実行はConnectionManagerを使う
CakePHP3で生の SQL文を実行する方法を解説。クリエビルダーを使う場合は TableRegistryを利用するが、SQLを実行する場合は ConnectionManagerを使う。プリペアードステートメントの使用方法も解説。
-
-
CakePHP 2.3で確認画面付きのお問い合わせフォームの作り方
CakePHPで確認画面付きのお問い合わせフォーム、メールフォームの作り方をサンプルを提示しながら解説。
-
-
CakePHP3で /Layout/defult.ctpにある titleタグ、h1タグを編集する方法
CakePHP3でtitleタグ、h1タグのテキストをデフォルトから変更する方法を解説。テンプレートファイルに「$this->assign()」でテキストを指定して「/Layout/defult.ctp」で受け取る。
-
-
CakePHP 2.3 コマンドラインからPHPのシェル実行の方法解説
CakePHP 2.3でコマンドラインから CakePHPで記述した処理を実行する方法を解説します。
-
-
CakePHP4で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法を解説。複数の方法があるが、getParam()メソッドを使う方法が汎用性があって便利かも。
-
-
CakePHP3でデフォルトのソート条件を設定してユーザの選択肢たソート条件を有効にする方法
CakePHP3でデフォルトのソート条件を設定しつつ画面上でユーザがソート条件を選択したときもソート処理を実行させる方法を解説。ソート条件はページネーションの処理として実装。