2012年8月1日水曜日

cakeを触ってみた

先日、cakeを試してみようとおもってて、、
でもExtJSとの絡みを考えるとDirect使えんしなぁ
と呟いてたら@martini3ozさんがBanchaってのがそれっぽいよ。
と教えてくれました。
見てみます!と返信したもののCake自体が
チンプンカンプンなので入門の入門を触ってみました。

CakePHP2.0

事始め
こちらををベースに写経していきます。

ダウンロード~動かすまで

  1. DL
    2012/7/6現在の最新版のstableである2.2.0を使用してみます。
    こちらのTOP右側のリンクからDL可能。

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
前のエントリでも書きましたが、Bancha0.9.5は2.2.Xシリーズには
対応しておらんようです。
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

  1. 設置
    UserDir有効のためUsrDir/cakephpTest/public_html配下にcakephpTestとして配置してみた。
    で、このままだとnotfoundになるのでpublick_html配下の.htaccessに

    RewriteBase /~cakephpTest/

必然的にその配下の関連する.htaccessも書きかえました。

public_html/app配下の.htaccess

RewriteBase /~cakephpTest/app/  

public_html/app/webroot配下の.htaccess

RewriteBase /~cakephpTest/app/webroot/  

を追記。

  1. 確認

    localhost:8080/~cakephpTest/

アクセスして確認。
* DBの設定
* セキュリティソルト、セキュリティシードはあと。で設定。

Controllerについて

コントローラは/app/Controller配下に作る。
コントローラは(アプリケーション)ごとに設置と理解。
で、コントローラ名は(アプリケーション名:パスカルケースにして)+Controller.phpとするらしい。
ex)hogehogeというアプリケーション→HogehogeController.php
コントローラ(アプリケーション)は複数のアクションをまとめたもの?として理解。

ファイル命名規則は、パスカルケースで、

XxxxxxController.php  

として作成すること。
クラスの命名規則も同様に。

クラス定義

Controllerクラスの定義はまず、

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

として利用できるように定義、
AppControllerクラスを継承して定義するみたい。

アクション定義

publicメソッドがアクションとして認識されるようですね。
メソッド≒アクション。と。
基本、アクションが1URLに割り当てられる見たい。

アクション間遷移

  • リダイレクト

    public function index()
    {
    $this->autoRender = false;
    $this->redirect(‘./other’);/そのコントローラ(アプリケーション)内のotherメソッド(アクション)にリダイレクト/
    }

  • フォワード
    public function index()
    {
    $this->autoRender = false;
    $this->setAction(‘other’);/そのコントローラ(アプリケーション)内のotherメソッド(アクション)にフォワード(URLの変更は発生せず)/
    }

  • URLパラメタによる値渡し

    $this->redirect(‘./other/hoge/fuga/piyo’);

Modelの利用

モデル名がコントローラ名と一致した際に自動的に利用可能になるようです。
ただ、明示的に設定することも可能で、
var $uses = array(‘Recipe’, ‘User’);
のように$usesプロパティに指定することでインスタンス化されるようです。


お試しコード

<?php  

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

// {{{ sampleController  
/**  
 * sampleController Class  
 *  
 * sample  
 *  
 * @category   CategoryName  
 * @package    PackageName  
 * @copyright  2011-2011  
 * @license    http://www.opensource.org/licenses/mit-license.html MIT License  
 * @version    Release: sample  
 */  
class SampleController  
extends AppController  
{  
    // {{{ const  
    // }}}  
        // {{{ props  
    // }}}  
    // {{{ __construct  
    /**  
     * コンストラクタ  
     *  
     * @param type argname discription  
     **/  
//    function __construct($argname)  
//    {  
//        # code...  
//    }  
//    // }}}  
//    // {{{ __destruct  
//    /**  
//     * デストラクタ  
//     **/  
//    function __destruct()  
//    {  
//        # code...  
//    }  
    // }}}  
    // {{{ index  
    /**  
    *  
    *  
    * @param type $argname discription  
    * @return type discription  
    */  
    public function index()  
    {  
        $this->autoRender = false;  
        //var_dump('index');  
        //$this->redirect('./other/hoge/fuga/piyo');  
        //$this->setAction('other','hoge','fuga','piyo');  
        $params = array(  
            'hoge' => array(  
                'hoge1' => 'hogehoge1',  
                'hoge2' => 'hogehoge2',  
                'hoge3' => 'hogehoge3',  
            ),  
            'fuga' => array(  
                'fuga1' => 'fugafuga1',  
                'fuga2' => 'fugafuga2',  
                'fuga3' => 'fugafuga3',  
            )  

        );  
        //$this->setAction('other','hoge','fuga','piyo');  
        $this->setAction('other',$params);  
    }  

    //public function other($a,$b,$c){  
    public function other($params){  
        $this->autoRender = false;  
        //var_dump('other');  
        //var_dump($a);  
        //var_dump($b);  
        //var_dump($c);  
        var_dump($params);  
    }  

    // }}}  
}  
// }}}  

0 件のコメント: