PHP
CakePHP
cakephp2
フレームワーク

【随時更新】CakePHP2 について

More than 1 year has passed since last update.

これから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']);
    }