CakePHP 概要

CakePHP はウェブ開発を単純に簡単にできるように開発されました。 オールインワンの ツールボックスは色々なパーツが一緒に動いたり、バラバラに動いたりできるようにします。

この概要の目的は、CakePHP の一般的なコンセプトとそのコンセプトがどのように CakePHP の中で働くのかを紹介することです。 プロジェクトをすぐに始めたいなら、 チュートリアルから始める直接ドキュメントを見て下さい

設定より規約

CakePHP は基礎的な構造をクラス名、ファイル名、DB のテーブル名や他の規約から決定します。 規約を学ぶことで、不必要な設定や他の一般的なアプリと同じ構造をいちいち書かなくて済むので、 簡単に色々なプロジェクトを進められます。この 規約 は、 いろいろな CakePHP で使う規約をカバーしています。

モデル層

モデル層はビジネスロジックを実装するアプリケーションの部品を表します。これはデータの検索、 アプリケーションに意味のある形への変換、また処理、検証(validating)、関連(associating)、 そしてデータを扱うことに関する様々なタスクに責任をもつことを意味します。

一見して、モデルオブジェクトはアプリケーションに使用しているであろうデータベースとやりとりする 最初の層と見ることができるでしょう。 しかし、一般的にこれはアプリケーションを実装するものの主要な概念を表します。

ソーシャルネットワークのケースでは、モデル層はユーザのデータを保存する、友人の繋がりを保存する、 ユーザの写真を保存または検索する、新しい友人の提案を検索する、等々のタスクを引き受けることでしょう。 このとき、モデルオブジェクトは「友達(Friend)」、「ユーザ(User)」、「コメント(Comment)」、 「写真(Photo)」と考えることができます。 users テーブルからデータを読みたかったら、

use Cake\ORM\TableRegistry;

$users = TableRegistry::get('Users');
$query = $users->find();
foreach ($query as $row) {
    echo $row->username;
}

データを使って仕事をする前に一切コードを必ず書かなくてもよいことに気づくでしょう。 規約を使うことによって、CakePHP はまだ定義されていないテーブルとエンティティクラスのための スタンダードクラスを使うようになります。

新しいユーザーを作ってバリデーションしてから保存したいなら、このようにします:

use Cake\ORM\TableRegistry;

$users = TableRegistry::get('Users');
$user = $users->newEntity(['email' => 'mark@example.com']);
$users->save($user);

ビュー層

ビュー層は、モデルから来たデータをレンダリングします。ビューはモデルオブジェクトとは別に存在します。 そして、扱っている情報に対してレスポンシブルなアプリケーションが必要としている表示インターフェイスを すべて提供可能です。

例えば、このビューはモデルのデータを利用して HTML ビューテンプレートや他で利用するための XML 形式の結果をレンダリングできます。

// ビューテンプレートファイルで 'element' をそれぞれのユーザーに対してレンダリングする
<?php foreach ($users as $user): ?>
    <li class="user">
        <?= $this->element('user', ['user' => $user]) ?>
    </li>
<?php endforeach; ?>

このビュー層は ビューテンプレートエレメントビューセル のようなしくみで表示のためのロジックを再利用可能にして、 沢山の表示を拡張するための機能を提供します。

ビュー層は HTML やテキストのレンダリングを制御出来るだけではなく、一般的な JSON や XML、 加えてプラグインで追加可能なアーキテクチャによるフォーマットなら何にでも対応します。

コントローラ層

コントローラ層はユーザからのリクエストを扱います。これはモデル層とビュー層の助けを借りてレスポンスを レンダリングして返す責任を負います。

コントローラは、タスクを終える為の全ての必要とされるリソースが正しい労働者に委譲されることに注意を払う マネージャーと見ることができます。 クライアントからの要求を待ち、認証と承認のルールによる検証を行い、データの取得または処理をモデルに委譲し、 クライアントが受け入れる適切な表示上のデータの種類を採択し、最終的にその描画処理をビュー層に委譲します。 例えば、ユーザー登録ではこのようになります。

public function add()
{
    $user = $this->Users->newEntity();
    if ($this->request->is('post')) {
        $user = $this->Users->patchEntity($user, $this->request->getData());
        if ($this->Users->save($user, ['validate' => 'registration'])) {
            $this->Flash->success(__('You are now registered.'));
        } else {
            $this->Flash->error(__('There were some problems.'));
        }
    }
    $this->set('user', $user);
}

明示的にビューをレンダリングしないことに気付くかもしれません。 CakePHP は規約によって正しいビューを選択し、 set() で用意したビューデータでそのビューをレンダリングします。

CakePHP のリクエストサイクル

色々なレイヤーに親しんでいただきました。次は、リクエストサイクルがどのように働くのか見て行きましょう:

Flow diagram showing a typical CakePHP request

典型的な CakePHP のリクエストサイクルはユーザがアプリケーション内でページまたはリソースにリクエストを 投げるところから始まります。高位のそれぞれのリクエストは以下のステップで動きします:

  1. ウェブサーバが webroot/index.php へのリクエストを制御するルールを書き換えます。
  2. あなたのアプリケーションがロードされ、 HttpServer にひも付きます。
  3. あなたのアプリケーションのミドルウェアが初期化されます。
  4. リクエストとレスポンスは、あなたのアプリケーションで使用する PSR-7 ミドルウェアを経由して ディスパッチされます。これは、一般的にエラートラップとルーティングを含みます。
  5. ミドルウェアからレスポンスが返らない場合やリクエストがルーティング情報を含む場合、 コントローラとアクションが選択されます。
  6. コントローラのアクションが呼ばれ、コントローラが要求されたモデルとコンポーネントと通信します。
  7. コントローラが出力を生成するためにレスポンスの生成をビューに委任します。
  8. ビューがヘルパーとセルを使ってボディとヘッダを生成して返す。
  9. レスポンスは、 ミドルウェア を経由して送信されます。
  10. HttpServer は、ウェブサーバにレスポンスを送ります。

さっそく始めましょう

この文章があなたの興味を惹くことを願っています。CakePHP には他にもとてもいい特徴があります。:

次の明白なステップは download CakePHP で, チュートリアルとなにかすごいものを作る を読んで下さい。.