CakePHP3.x(3.3)導入・インストールメモ(Windows環境)

Windowsのローカル開発環境に、CakePHPの3.x系(今回は3.3)を導入する時の手順や気を付ける点をメモしておきます。

1)事前準備

CakePHP公式サイトの「クイックスタートガイド」ページを読む。

2)Composerの準備をする

CakePHP3.x系は、Composerを使って導入するようなので、Composerをダウンロードしてインストールする。
Composerをダウンロード
インストールは、Composer-Setup.exeをダブルクリックして、あとは画面に沿って基本的に「Next」押して進める。

3)インストールフォルダを用意する

コマンドプロンプトを起動して、CakePHPを入れたい・インストールしたいフォルダ(ディレクトリ)に「cd」コマンドで移動する

例)xamppのhtdocsのtestフォルダにインストールしたい場合

cd C:\xampp\htdocs\test
CakePHP3.x インストールディレクトリに移動
CakePHP3.x インストールディレクトリに移動

4)Composerを使用して、CakePHP3をインストールする

コマンドプロンプトに、以下コマンドを入力する。

composer create-project --prefer-dist cakephp/app bookmarker

※このコマンドは「bookmarker」という名前のアプリを開発したい場合。ここは、自分が作りたい名前(「blog」「music」等)に適宜変えて下さい。

CakePHP3.xインストール
CakePHP3.xインストール

最後に
「Set Folder Permissions ? (Default to Y) [Y,n]?」
と聞かれたら、パーミッション(アクセス権)の事なので、デフォルトの「y」と入力してエンターキーを押してください。

これで、CakePHP3.3のインストールは完了です。

5)インストールが成功したか確認をする

ブラウザに、今作ったフォルダのURL(http://localhost/test/bookmarker/)を入力してみて、以下の様なページが表示されたらOKです。

cakephp3.3ブラウザ初期表示
cakephp3.3ブラウザ初期表示

もし、以下の様なページが表示されたら、原因はCakePHP3で使われる「extension=php_intl.dll」が無効になってるということなので、有効にする必要があります。

extension=php_intl.dllが無効になってる場合
extension=php_intl.dllが無効になってる場合

ファイル「php.ini」をエディタで開いて、「extension=php_intl.dll」で検索をかけて、その行がコメントアウト(行頭がセミコロン「;」)されていたら、そのセミコロンを削除して、ファイルを保存します。
※「php.ini」は、例えばxamppを利用している場合は、「xampp\php」のフォルダ内にあります。

サーバを再起動して、さっきのURL(http://localhost/test/bookmarker/)のページを再読み込み(リロード)してみると、おそらくページが正常に表示されるはずです。

6)設定に問題がないか確認する

そのページの下の方にチェックリストがあるので、各項目問題ないかチェックします。
おそらく「Databese」の項目は、赤い×印がついているかと思いますが、これは「データベースの設定をまだしていない為です。

test\bookmarker\config
(test\bookmarkerは、各自CakePHPをインストールしたフォルダに読み替えて下さい)
フォルダ内の「app.php」をエディタで開いて、「Datasources」という所にある各項目(「username」「password」「database」の3項目)を設定すれば、以下の様にチェックがOKになると思います。

cakephpデータベース設定
cakephpデータベース設定

以上で、CakePHP3.xのインストールは完了です。
お疲れ様でした。

ここからは、CakePHP Cookbookのチュートリアルを見ながら、サンプルページを作ってみてくださいませ。

CakePHPのselectボックスのemptyオプションでvalueを指定する方法

CakePHP2.xのformにて、selectボックスのemptyオプションでvalueを指定したい場合どうすれば良いのか、メモ代わりに記述しておきます。

※公式のCakebook 2.xには記述が見当たらなかった(私の探し方が下手なだけの可能性もあり)ので。

■Cakebook2.xに掲載されている内容(を参考に私が書いたもの)

echo $this->Form->select('field', array(1 => 'Internet Explorer', 2 => 'Google Chrome', 3 => 'Firefox'), array('label'=>false, 'empty'=>'ウェブブラウザ'));

上記の様に記述した場合、出力されるHTMLは以下の様になります。

<select name="data[Xxx][field]" id="XxxField">
<option value="">ウェブブラウザ</option>
<option value="1">Internet Explorer</option>
<option value="2">Google Chrome</option>
<option value="3">Firefox</option>
</select>

これだと、ウェブブラウザの項目のvalueは空っぽです。

emptyオプションの指定を

'empty'=>'ウェブブラウザ'

と行うと、valueの値は空っぽになります。

例えばvalueの値を「0」にしたい場合は、以下の様にすれば良いようです。

■selectボックスのemptyオプションでvalueを指定する方法

echo $this->Form->select('field', array(1 => 'Internet Explorer', 2 => 'Google Chrome', 3 => 'Firefox'), array('label'=>false, 'empty'=>array(0 =>'ウェブブラウザ')));

上記の様に記述した場合、出力されるHTMLは以下の様になります。

<select name="data[Xxx][field]" id="XxxField">
<option value="0">ウェブブラウザ</option>
<option value="1">Internet Explorer</option>
<option value="2">Google Chrome</option>
<option value="3">Firefox</option>
</select>

ウェブブラウザの項目のvalueに「0」がセットされました。

emptyオプションの指定を

'empty'=>array(0 =>'ウェブブラウザ')

というように、連想配列で渡せば良いようです。

[参考]ここに、フォーム(select、checkbox、radioのオプションに関する記述あり。ただし、「valueが空っぽになる」方の記述法しか掲載されていないようです。)
Cakebook 2.x -> FormHelper -> Options for select, checkbox and radio inputs

CakePHPで指定エレメントが存在するかどうかチェックする

CakePHP2.3から、指定エレメントが存在するかどうかチェックする
View::elementExists()
が追加されました。

CakePHP 2.3移行ガイド
※ページ内の「ビュー」の説明部分に該当記述あり。

これにより、例えば
「指定したエレメントがあればそれを使って表示し、無ければ表示しない。」
とか
「サイドメニューで、コントローラと同じ名前のメニュー用エレメントが存在すればそれを使い、無ければデフォルトメニュー用エレメントを使う。」
といった感じに使えるかな、と思います。

例)View/Elements/ディレクトリ内にmenu.ctpというエレメントがあるかどうかチェックする。
ビューで以下の様に記述する。

if ($this->elementExists('menu')) {
	//エレメントが存在した場合の処理
} else {
	//エレメントが存在しなかった場合の処理
}