エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


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環境でコマンドを実行する際の例です。
 

 
 
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環境でコマンドを実行する際の例です。
 

 
 

上記のエラーが出る場合は、パスが設定されていない場合が多くあります。
パスが設定されていない場合は、「/アプリのルート/bin」フォルダの中に入って、「cake plugin load Josegonzalez/Upload」を実行します。
 
 

手作業で「config/bootstrap.php」に記述する方法

 
上記の通り、コマンドを実行する方法もありますが、コマンドを実行して処理される内容を手作業で行う方法もあります。
 
具体的には、「/config/bootstrap.php」に下記を追記します。
 

 
追記する場所は、「/config/bootstrap.php」ファイルの一番下など、他のプラグインのロードが記述されているところに並べて書くといいでしょう。
 
 

3.画像データを保存するカラムをテーブルに追加

 
テーブルに、アップロードする画像を保存するカラムを設定します。
(下記のサンプルは、topicsという「お知らせ」を管理するテーブルの想定で、10行目~13行目が対象のカラムになります。)
 

 
「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行目です。)
 

 
 

6.フォームテンプレートにファイルアップロード処理を追記

 

フォームタグの createに「enctype」「type」を追記

 
フォームタグ(<form>)を生成する createに「type」を追加します。
 

 
 

フォームタグの inputに「type」を追記

 
続けて、ファイルを入力する項目にも「type」を追加します。
 

 
フォームヘルパーの使い方に関しては、「CakePHP3のForm Helperの使い方のまとめ」に記事を書いていますので、参考にしてください。
 
 
これで、ファイルのアップロードができるようになります。
 
 

Upload Plugin 3.0の設定時のエラーについて

 
Upload Plugin 3.0を設定する際に発生するエラーについて解説します。
 
 

「Missing Plugin」と表示される

 
Upload Plugin 3.0をインストールしたにもかかわらず、画面を表示すると下記の様に「Missing Plugin」と表示される場合の対処方法です。
 

 
「インストールした 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」に関する記事一覧
 
 

 - CakePHP 3.x 4.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説
CakePHP4のCakeDC/Usersの画面、メール本文テンプレートのカスタマイズ方法解説

CakeDC謹製Usersプラグインの紹介。ユーザ新規登録の流れを紹介しつつ、テンプレートファイル、設定情報ファイルの場所とそれらをカスタマイズする方法を説明します。

CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定
CakePHP3のCakeDC/Users、Authでログインなしでもアクセスを許可する設定

CakePHP3の Authコンポーネントや CakeDC/Usersプラグインなどを利用したユーザ管理・認証システムにおいて、ログインしていなくても見ることができるページの設定方法を解説。

CakePHP 2.3 Model、Controllerの見たい変数の中身をログ出力

CakePHPの Modelや Controllerの変数の中身をログとして出力して見る方法を提供します。

CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。
CakePHP3で Ajaxを使う方法の解説。3.6以降対応。Successとthenの両方を解説。

CakePHP3でajaxを利用する処理の実装方法を解説。プルダウンを変更するとデータベースの値を取得し検索結果の内容を変更するというような処理を想定。CakePHP3.6以降の CSRF対策対応済。

CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法
CakePHP3のビューで受取ったテーブルのオブジェクトを連想配列に変換する方法

コントローラーからビューに送ったテーブルのオブジェクトを連想配列に変換し、ビューの中で自由に使えるようにするメソッド「toArray()」の解説。連想配列に変換できれば利用度アップ!

国際化と地域化の翻訳機能「__()」を使って定数に変数を埋め込む方法
国際化と地域化の翻訳機能「__()」を使って定数に変数を埋め込む方法

CakePHP4で定数に変数を埋め込み、翻訳機能「__()」で変数に値を入れる方法を紹介。定型の文章の一部だけを置換したい場合に利用すると便利。

CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法
CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法

CakePHP3で現在処理しているコントローラー名、アクション名を取得する方法を解説。複数の方法があるが、getParam()メソッドを使う方法が汎用性があって便利かも。

CakePHPで favicon.icoやapple-touch-icon-144-precomposed.pngが could not be foundのエラーが出るときの対処方法
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にデイトピッカー jQuery UI DatePickerを実装する手順の解説
CakePHP3にデイトピッカー jQuery UI DatePickerを実装する手順の解説

CakePHP3にjQuery UIのDatePickerを実装する手順を説明。併せて、デイトピッカーを設置に関連するCakePHP3の解説と、テーマを変更したり、表記を変更するカスタマイズする方法なども紹介。

CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法
CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングする方法

CakePHP3でPHP Simple HTML DOM Parserを使ってスクレイピングをする方法を解説。インストール方法、読み込み方法。および、具体的なスクレイピングを実行するサンプルソースも。