Help us understand the problem. What is going on with this article?

【随時更新】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']);
    }



Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした