LoginSignup
1
2

More than 5 years have passed since last update.

【随時更新】CakePHP2 について

Last updated at Posted at 2017-08-04

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



1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2