前回【CakePHP】初心者向けの基本ルールでは、CakePHPの概要と基本的な規約をご紹介しました。今回は、その続きで「なんかよくわからんけど、とりあえず使ってみるか」というレベルの基本の使い方をご紹介します。

記事を書くにあたって基本をふりかえりつつ色々調べていたんですが、「え?この機能こんな使い方あったんかい…(今更)」みたいな発見があって、まとめることの大切さを実感するのでありました(^^;)

前提

  • CakePHPをインストール済
  • この記事はCakePHP2系の内容です。

初めてのCakePHPプログラム

CakePHPは「MVCモデル」を採用していて、Model・View・Controllerで一つの機能ができあがります。ただしこの3つが常に必須かというとそうではありません。Modelはデータを扱うものなのでデータベースを使わない機能には不要ですし、Viewも見た目を一切気にしないなら無くても成り立ちます。

コントローラーさえあれば動くものは作れるのですが、Viewを使わないとなるとControllerでhtmlタグを記述するはめになるので、今回は「Controller」、「View」を使って適当な文字を表示するページを作ってみたいと思います。

例として、「example」ページを作ります。【CakePHP】初心者向けの基本ルールでも書いたように、まずは命名規約にしたがってファイルを作ります。大文字小文字、にも注意してください。

Controller /cake/app/Controller/ExamplesController.php
(アクション名:index)
View /cake/app/View/Examples/index.ctp
この場合のURL http://localhost:8888/cake/examples/index/

※「http://localhost:8888/cake/」でcakeトップにアクセスできる場合のURL

Controllerを作る

作成したExamplesController.phpの中身は次のとおり。クラス名はファイル名と同名にします。

「index」という関数がありますが、CakePHPではこの関数の処理を終えたあと、同名のViewの「index.ctp」に処理が引き継がれ、自動的に表示されます。関数名とViewファイルはファイル名で対応しているので、例えば「add」という関数を追加したらViewにも対応する「add.ctp」を作ります。

// ExamplesController.php
<?php
App::uses('AppController', 'Controller');

class ExamplesController extends AppController {

  public function index() {
    $this->set("title_for_layout","はじめてのCakePHP");
    $this->set("message","なんらかの文字");
  }
}

「title_for_layout」というのはデフォルトのページタイトル変数で、ブラウザのタイトルバーに出る文字を指定できる変数です。

CakePHPでは「$this->set(Viewでの変数名,中身);」でViewにデータを送ることができます。非常〜によく使うのでいつのまにか覚えてしまうと思います。

Viewを作る

Viewに作成した「index.ctp」の中身は以下を記述します。コントローラーで指定した「message」という変数に入れた文字を出力しているだけの簡単な例です。

// Examples/index.ctp
<?php 
echo $message;

ファイルを保存したら、ページにアクセスしてみましょう。

作成したページの閲覧

先ほど作成したexampleは、「http://localhost:8888/cake/examples/index/」という感じのURLで確認できます。実際に表示してみると、スタイルなどは特に何も記述していないのにCakePHPのデフォルトデザインのヘッダー&フッターつきで、「message」に設定した文字列が表示されていると思いますがいかがでしょうか?

アプリを作る時、デザインを後回しにして機能から作りたいことは多々あります。そういうときのために、CakePHPにはデフォルトデザインが用意されています。デザインは使わないようにすることもできるし、別のデザインに変更することももちろん可能ですが、詳しい方法はまた今度。

以上がCakePHPでウェブページを作る基本です。ちょっと簡単すぎてもの足りなかったかもしれないですね。
example以外にも、他のページを追加したり、Controllerで現在時刻を取得してViewで表示する…などいろいろ試してみてください〜。