MVCモデル
MVCモデルはModel、View、Controllerの3要素で成り立ち、互いを呼び出し合って処理を行う。
Cotrollerはプログラムの制御する役割を担っている。例えば、Controllerが呼び出された時に、様々な判定処理や計算処理を行い、その結果をModelまたはViewに受け渡す。
また、Controllerはクライアントとやりとりをする役割をになっていて、クライアントのHttpリクエストはコントローラーに対して行われ、リクエストに応じてviewを返す。viewを返すまでの間Modelからデータをうけとってviewに受け渡すなどの処理をしている。
Viewは、表示を司っている。基本的にHtmlの描画になっているが、Controllerから受け取ったデータを表示することもできる。
Modelは、データベースとやりとりしてデータを扱う役割を担っている。実は、モデルにはデータの取得する関数などは予めCakePHPで用意されていて、複雑なデータ取得関数以外は自分で記述する必要がない。
モデルにモデルの構造を記述することで、ControllerからModel->findのようにデータの取得が可能である。
#Controller
###コントローラーの作り方
- Controllerフォルダ以下に「名前Controller」の命名規則でファイルを作成する
- AppControllerを継承して「名前Controller」の命名規則でクラスを作成する
※AppControllerはCakePHPに用意されているクラスでコントローラーの仕組みを備えている。これを経書しなければコントローラーとは認められない。
###Urlの規則
http://localhost:8000/コントローラー名(Controllerを抜かした部分)/アクション名
※ある規則(rest api)に沿っている場合、アクション名を省略していい場合がある
###AppControllerのクラス関数、クラス変数
クラス名の指定
$name = コントローラ名
他のクラスを読み込む時
App::uses('クラス名','ファイルパス')
//(例)
App::uses('AppController', 'Controller');
App::uses('HttpSocket', 'Network/Http');
App::uses('AppModel', 'Model');
コントローラで使うModelの宣言
public $uses = array(
'Order',
'User'
}
###アクションの移動
setActionとredirectがある。
setActionがアクションを直接指定して実行するのに対して、redirectは指定したurlに再度、HTTPリクエストを送る形でアクションを実行する。なので、setActionでは、urlのリンクは変わらないが、redirectではurlがかわる。
#View
ビューには大きく分けて「テンプレート」と「レイアウト」がある。
2つの関係は、レイアウトがヘッダーやフッターなどの枠組み、内容部分にテンプレートが入る。
レイアウトはメニューバーなど複数ページで共通して表示させたい場合や統一したデザインにしたい場合に便利だ。
アクションごとにレイアウト機能をoffにすることも可能だ。
###テンプレートファイル
<title><?php echo 変数 ?></title>
みたいな形で、echoでhtmlタグ内に表示させることで、echoしたものを普通のテキストの様に認識する。
レイアウト
デフォルトレイアウトはView/Layouts/default.ctp
に設定されている。
appコントローラのメンバ変数$layoutを指定することでpublic $layout = レイアウト名;
、
使用するレイアウトを指定することができる。
テーマ
基本的に、レイアウトでデザインや枠組みを統一したいが、このページに関してはデザインを少し変えたいという場面があると思う。その際に、レイアウトを変えずにデザイン(cssの部分)を変えることができるのがテーマだ。
-
View/themed/helloTheme/themed/webroot/css
にcake.generic.css
の様な形でcssを用意する。 - アクションで使うテーマを指定する
$this->theme = "helloTheme";