これからCakePHPを勉強するにあたって、【自分のメモ用】とphpをある程度理解できたので【これからフレームワークを勉強しよう】とする方に向けてこの記事を書かせていただきます。
コントローラーに引き継がれたリクエスト情報を確認する方法
app/Controller/MetingRoomsController.php
public function view($id = null) {
debug($this->request->params);//1行追加 ここでアプリケーションルート以降のURLがセットされたデータが確認できる
if (!$this->MeetingRoom->exists($id)) {
throw new NotFoundException(__('Invalid meeting room'));
}
$options = array('conditions' => array('MeetingRoom.' . $this->MeetingRoom->primaryKey => $id));
$this->set('meetingRoom', $this->MeetingRoom->find('first', $options));
}
返り値
http://localhost/meetingman/meeting_rooms/view/1/a:2/b:3の場合
array(
'plugin' => null,
'controller' => 'meeting_rooms',
'action' => 'view',
'named' => array(
'a' => '2',
'b' => '3'
),
'pass' => array(
(int) 0 => '1'
)
)
ローディング処理
app/Controller/MetingRoomsController.php
// app/ControllerディレクトリにあるAppController.phpをロードする
App::uses('AppController', 'Controller');
【コントローラー】共通の決まりごと
- コントローラークラスの名前は【キャメルケース複数形】とする
- コントローラークラスのファイル名は【コントローラー+クラス名+.php】とする
- コントローラークラスはAppControllerクラスを継承する 例:class MeetingRoomsController extends AppController
- AppControllerクラスはApp::uses()で読み込んでおく 例:App::uses('AppController', 'Controller');
リクエスト情報の管理
boolean is ([種類:文字列])
【is()】は、そのリクエスト情報の種類をboolean でチェックしてくれる
下記の場合、$result の中に、そのhttpリクエストが【POST】かどうか判断してくれる
$result = $this->request->is('post');
//その他:'get','ssl','ajax'がある
リダイレクトする方法
app/Controller/MetingRoomsController.php
$this->redirect(array('action' => 'index'));
※リダイレクトするときの注意点
リダイレクトは一度制御がサーバーからブラウザに映るため、【redirectの前に一覧画面に何か表示しようと思って、set()しても意味がない】ということ
↓
その場合はセッションを使い、データを保存し、データを出力する
SessionComponent::setFlash()を使用して情報をセットする
app/Controller/MetingRoomsController.php
public function edit($id = null) {
if($this->request->is('post')) {
//更新処理
if($this->MeetingRoom->save($this->request->data)) {
//セッションにメッセージの書き込み
$this->Session->setFlash('succeed!');
//リダイレクト
$this->redirect(array('action'=>'index'));
}
}
}
Cookieファイルの操作方法
Cookieとは
ブラウザ側に情報を保存する仕組みのこと。
CakePHPでは、Cookie機構を利用して、【セッションID】の情報を取り出している
$cookieName = 'YourSiteName' //Cookieの名前
$cookieKey = 'key1'; //Cookie内の識別名
//Cookieの情報を取得する(keyが存在しない場合はnullを返す)
$val = $this->Cookie->read($cookieName.'.'.$cookieKey);
//Cookieに値を保存する
$this->Cookie->write (
$cookieName.'.'.$cookieKey,
$val, //保存する値
$encypt, //値を暗号化するか(省略時:true)
$expires, //Cookieをいつまで有効とするか 省略時:ブラウザを閉じるまで有効
);
//Cookieの情報を削除する
$this->Cookie->delete($cookieName.'.'.$cookieKey);
ファイルをダウンロードするアクション
public function sendFile($id = null) {
$setting = array(
// ファイルの種類
'type' => 'txt',
// 【名前をつけて保存】に表示されるファイル名
'name' => 'super.txt',
// ダウンロードファイルの内容
'content' => file_get_contents('C:\xampp\htdocs\meetingman\app\message.txt'),
);
// 定義されていない種類のファイルを出力する場合は MIMEをセットする
$this->response->type(array('txt'=>'text/plain'));
// レスポンスヘッダの組み立て
$this->response->type(array('txt'=>'text/plain'));
// 画面表示は行わず、レスポンスを直接セット
$this->autoRender = false;
$this->response->body($setting['content']);
}