[PHP]CakePHP 3のインストールと初期設定

Pocket

CakePHP は Ruby on Rails に影響を受けた PHP 製のフレームワークの一種で、「設定より規約」を原則としており、ファイル名やクラス名は基本的にルールに従って自動決定されるのが特徴です。

インストールは Composer を使って行います。インストールしていない場合は先に公式サイトの手順に従ってインストールしておいて下さい。

インストール

インストールコマンドは次のとおりです。「my_app_name」の箇所はフォルダ名になるので好きな名前に変更して下さい。

php composer.phar create-project --prefer-dist cakephp/app my_app_name

途中でパーミッションを変更するかを尋ねられるので「y」で許可して下さい。

インストールが完了したらフォルダの構造をざっと眺めてみます。
「bin」には cake 実行ファイルが入っています。コンソールコマンドか何らか操作を行う際に使用します。
「config」は設定情報が入っています。「src」はコントローラー、モデル、テンプレートなどの主要なファイルが格納されています。「webroot」フォルダは公開用のルートディレクトリです。ドメインを割り当てる際はこのフォルダを割当てて下さい。

初期設定

config フォルダにある「.env.default」は環境ごとの設定ファイルです。同じ場所に複製して「.env」という名前に変更してから使います。主な内容はデバッグモードの切り替えやロケール、タイムゾーンの設定などです。このファイルは .gitignore によって Git にコミットされないよう無視されています。

同様に「app.php」を編集してデータベースが使えるようにします。「Datasources」という箇所を探し、ユーザー名やパスワード、データベース名などを自分の環境に合わせて書き換えて下さい。

この時点でサイトのトップページにアクセスすると全体のステータスが確認できます。すべてが正しく設定されていれば緑色のアイコンが並んでいるはずです。

ルーティング

「/hello」という URL でアクセスされた場合に専用のページを表示することを目標にルーティングを設定していきます。ルーティングは config/routes.php に定義されています。すでにいくつかのルーティングが登録されていますが、$routes->connect() とあるあたりに次の行を追加します。

$routes->connect('/hello/', ['controller' => 'Hello', 'action' => 'index']);

第1引数がパスで、第2引数はコントローラー(controller)とそのメソッド(action)です。「Hello」とした場合は「src/Controller/HelloController.php」の index() が実行されることになります。

コントローラー

ではコントローラーファイル「src/Controller/HelloController.php」を作っていきます。

<?php
namespace App\Controller;

use App\Controller\AppController;

class HelloController extends AppController
{

    public function index()
    {
        $this->set('foo', 'World');
    }
}

基本的にすべてのコントローラーは AppController を継承します。$this->set() を使ってテンプレートに渡すための変数を用意しています。ここでは変数 foo に文字列 World が代入されています。

ビュー(テンプレート)

CakePHP ではビューファイルとして「.ctp」を使います。中身は普通の PHP ファイルです。テンプレートのファイル名はコントローラー名とメソッド名によって決まっていて、今回の場合「src/Template/Hello/index.ctp」となるようにフォルダとファイルを新規作成して下さい。

<!DOCTYPE html>
<html>
<head>
    <?= $this->Html->charset() ?>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Demo</title>

    <?= $this->Html->meta('icon') ?>
    <?= $this->Html->css('base.css') ?>
    <?= $this->Html->css('style.css') ?>
    <?= $this->Html->css('home.css') ?>
    <link href="https://fonts.googleapis.com/css?family=Raleway:500i|Roboto:300,400,700|Roboto+Mono" rel="stylesheet">
</head>
<body class="home">
<h1>Hello, <?= h($foo) ?>!</h1>
</body>
</html>

コントローラーとビューが用意できた時点で「/hello」にアクセスすると変数 $foo にコントローラーから渡された文字列「World」が代入され、結果的に「Hello, World!」と表示されます。h() は htmlspecialchars() と同様の関数で、内容がエスケープされて出力されます。

$this->Html は Html 関連のヘルパーで、文字セット、CSSや画像などのアセットへのリンク、ほかページへのリンクの出力など様々な機能があります。


参考: CakePHP Cookbook
https://book.cakephp.org/3.0/en/index.html


Similar Posts:




  • コメントを残す

    メールアドレスが公開されることはありません。