CakephpのテストでCakeRequestにアクセスして確認する

CakephpのテストでCakeRequestにアクセスする方法をメモ
Cakephp 2.5.3を使っています

まず、こんなコントローラーがあって

class SomethingController extends AppController {
    public function doSomething() {
        $data = ['aaa', 'bbb'];
        $this->request->data = $data;
    }
}

テストはこう

App::uses('SomethingController ', 'Controller');

class SomethingController extends ControllerTestCase {
    public function testDoSomething() {
        $result = $this->testAction(
            '/Something/doSomething',
            ['return' => 'vars']
        );
        $expected = ['aaa', 'bbb'];
        $this->assertEquals($expected, $this->controller->request->data));
    }
}

$this->controller->request

でCakeRequestにアクセスできました

いまさらながらphpのif文を確認

ふと、基本に戻って確認した

if (isset($data['a']) && $data['a']) {
    //
}

って最初しか評価されないよな、と

var_dump(true && true);
// true                                         
var_dump(false && true);
// false
var_dump(true && false);                                                     
// false
var_dump(isset($data['a']) && $data['a']);
// false
$data['a']
// NOTICEエラー

phpのif文は、最初の方から評価して、用が住めば後ろは評価しません
だから、動作を早くするには、早く解決する順でif文を組むといいですね

cakephpの「シンプルな認証と承認のアプリケーション 」チュートリアルをやってみた

シンプルな認証と承認のアプリケーション — CakePHP Cookbook 2.x ドキュメント
のチュートリアルをやってみました

環境などは
cakephp cookbook のチュートリアルをcomposerを使ってやってみた
でやったのでこの続きです

http://book.cakephp.org/2.0/ja/tutorials-and-examples/blog-auth-example/auth.html#id2
のsqlをmysqlに流して、usersテーブルを作成します

bakeでソースコードを用意
$ Console/cake bake all

Welcome to CakePHP v2.5.8 Console
---------------------------------------------------------------
App : cake-tutorial
Path: /vagrant/cake-tutorial/
---------------------------------------------------------------
Bake All
---------------------------------------------------------------
Possible Models based on your current database:
1. Post
2. User
Enter a number from the list above,
type in the name of another model, or 'q' to exit  
[q] > 2

PHPUnit is not installed. Do you want to bake unit test files anyway? (y/n) 
[y] > y

Bake All complete

これだけで、
http://localhost/users/
にアクセスすると、ユーザー一覧が表示され、追加も編集も削除もできます

$ vim Controller/AppController.php
でAuthとSessionのコンポーネントを用意します

Sessionは、画面にエラーメッセージを出すのに使っていて
Authはログイン認証で使っているようです

Authは認証 — CakePHP Cookbook 2.x ドキュメントに詳しく書いてあります

$this->Auth->allow(’index’)

ってなに?とか思ったら認証 — CakePHP Cookbook 2.x ドキュメントを見ましょう

AppControllerに

public function beforeFilter() {
    $this->Auth->allow('index', 'view');
}

を書くと、beforeFilterが画面アクセス時に最初にうごいて、Allow->allowで指定してあるアクションは認証を許す(ログイン不要)となります
といった感じでマニュアル見ながら進めると理解深まると思います

cakephp cookbook のチュートリアルをcomposerを使ってやってみた

cakephp cookbookのブログチュートリアルをcomposerでやってみました
composer、ウェブサーバー、mysqlは構築済みです

参考: ComposerでCakephpを入れてみた

ウェブサーバーの公開ディレクトリなどcakephpを入れたいディレクトリへ移動して

$ composer init

ででてくる指示に従い、依存関係はすべてnoにしてみました

{
    "name": "sample/cake-tutorial",
    "authors": [
        {
            "name": "username",
            "email": "sample@sample.co.jp"
        }
    ],  
    "require": {}
}

こんな composer.json ができます
そのままだと小文字のvendorディレクトリにいろいろインストールされます
cakephpはVendorディレクトリなので、最初を大文字に変更

{
    "name": "sample/cake-tutorial",
    "authors": [
        {
            "name": "username",
            "email": "sample@sample.co.jp"
        }
    ],  
    "config": {
        "vendor-dir": "Vendor"
    },  
    "require": {}
}

cakephpをいれます

$ composer require “cakephp/cakphp”:”2.5.*”

はいったら、bakeでプロジェクト作成
直下にしました
$ Vendor/bin/cake bake project .

appディレクトリ内にしたかったら
$ Vendor/bin/cake bake project app
ですね

webroot/index.php と webroot/test.phpにある
CAKE_CORE_INCLUDE_PATHの修正が必要だったらしますが直下につくればいらないはず

ウェブサーバーを起動してアクセス
こんな感じにでます

cake-top

パーミッションで怒られたら
http://book.cakephp.org/2.0/ja/getting-started.html#tmp
で対応

データベースを作成

mysqlにログイン
$ mysql -u root -p
(パスワード入力)

mysql> create database cakephptutorial;
mysql> grant all privileges on . to ‘caketutorialuser’@’%’ identified by ‘password’
mysql> flush privileges;
mysql> exit;

とかいう感じで、データベース名とかユーザー名は自分好みで作ります

http://book.cakephp.org/2.0/ja/getting-started.html#id3
のSQL文を create.sql とかテキストファイルに保存して

$ mysql -u root -p cakephptutorial < create.sql

で、SQL文を流してデータベース出来上がり

cakephpのデータベース設定をします
テンプレートがあるのでコピー
$ cp Config/database.php.default Config/database.php

データベース名とかユーザー名とかを作ったものに合わせます
$ vim Config/database.php

ブラウザでアクセス
cake-top2

データベースのエラーも来ました
(DebugKitは置いといて)

これでcakephpの環境できあがり

あとは続いて書くだけです
http://book.cakephp.org/2.0/ja/getting-started.html#id6