CakePHP で HelloWorld
CakePHPで動く物を簡単に作ってみます。
XAMMP(Apache)の htdocs 直下に cake1 というディレクトリを作り、そこにCakePHP2.5.8を導入します。以後、この cake1 フォルダのパスを [CakePHP ROOT] と呼ぶことにします。導入の仕方はこちらに書きました。
http://turkey246.hatenablog.com/entry/2015/03/04/123911
とりあえずは画面に HelloWorld と表示するだけをやってみます。
●コントローラーの作成
[CakePHP ROOT]\app\Controller に、 HelloWorldController.php というファイルを作成し、以下を記述します。
HelloWorldController.php
class HelloWorldController extends AppController {
/* コントローラー名 */
public $name = "HelloWorld";
/* レイアウトの使用 */
public $autoLayout = false;
/*
* デフォルトアクションメソッド
*/
function index(){
$msg_str1 = 'Hello World!';
$msg_str2 = 'CakePHP のサンプル画面です。';
//viewに渡す値をセット
$this -> set('msg1', $msg_str1);
$this -> set('msg2', $msg_str2);
}
}
?>
クラス名は [コントローラー名]+Controller となり、AppController を継承します。public $autoLayout はレイアウトを使用するかしないかの設定で、レイアウトについてはいずれまたの機会に説明します(たぶんね…)。URLを指定されたとき画面表示に必要な処理を記述するのがアクションメソッドで、メソッド名とURLがひも付いてます。詳しいことは後述します。 $this -> set(文字列, オブジェクト); はビューテンプレートにデータを渡すための処理で、ビューテンプレート側ではset関数第一引数の文字列の頭に $ を付けた変数で、第二引数のオブジェクトを参照することができます。
●VIEWテンプレートの作成
[CakePHP ROOT]\app\View の下に HelloWorld というフォルダを作り、その下に index.ctp というファイルを作成し、以下を記述します。
index.ctp
<html>
<head>
<meta charset="UTF-8" />
<title>Hello World</title>
</head>
<body>
<p>
<?php
echo $msg1;
?>
</p>
<p>
<?php
echo $msg2;
?>
</p>
</body>
</html>
以上を作成後、http://localhost/cake1/HelloWorld にアクセスする(Apacheの起動を忘れずに!)と、画面が表示されます。
アクセスするURLは、[ホストサーバーのルート]/[CakePHP ルートのフォルダ名]/[コントローラー名]/[アクションメソッド名]
になります。
コントローラーとビューテンプレートの関連付けは、以下のような命名規約に従うことで決まります。
・[CakePHP ROOT]\app\View 以下に、コントローラー名と同じ名前のフォルダを作る。
・上記フォルダの中にコントローラー中のアクションメソッドの名前をアンダースコアつながりに直したファイル名(拡張子は.ctp)でテンプレートを作ることにより、アクションメソッドと関連付けられる。
上のサンプルコードの場合、コントローラー中のアクションメソッドが function index() で、関連付くビューテンプレートが index.ctp なわけです。function fooPage() ならば foo_page.ctpになります。
アクセスするURLは先に書いたルールに従うと、アクションメソッド function index() のページにアクセスするためには http://localhost/cake1/HelloWorld/index となるはずですが、最後のindex を省略した状態でアクセスできています。省略した場合、デフォルトで index へ行くという動きをするようになっており、省略せず index を付けた状態でも同じページが表示されます。
ちなみに アクションメソッド function fooPage() のページを表示するためのURLは http://localhost/cake1/HelloWorld/fooPage となります。