2010年9月23日 星期四

cakephp 第一個範例

先修改連線設定檔,如果資料庫是 utf8 編碼,請最後加入鍵名 encoding 和鍵值 utf8:


/* /app/config/database.php */
var $default = array('driver' => 'mysql',

                          'connect' => 'mysql_connect',

                          'host' => 'localhost',

                          'login' => 'NAME',

                          'password' => 'PASSWORD',

                          'database' => 'cake',

                          'prefix' => '',

                          'encoding' => 'utf8'); // 請注意這一行!

在 app/Model/post.php 裡面宣告一個類別,代表要操作的資料庫

class Post extends AppModel
{
     var $name = 'Post';
    
     //var $userTable = 'articles'; 也可以這樣指定資料表
}


這代表了新增一個 Model ,我們採用預設的命名規則,資料表的名稱叫做 posts (複數)。

當然,我們也可以不用預設命名規則,如上所示。

接下來建立 app/controllers/posts_controller.php 當作 Controller 。

set('posts', $this->Post->findAll($conditions = null,

                                $fields = "",

                                $order = 'ID ASC',

                                $limit = null,

                                $page = 1,

                                $recursive = null));

        } // 這邊要依照 ID 排序,$condition 代表的是 SQL 的 WHERE 條件

 

        function view($id = null)

        {

            $this->Post->id = $id;

            $this->set('post', $this->Post->read());

        } // 這是閱讀單篇文章用的

}

?>
Controller 裡面的$this->set() 就是用來把變數「傳遞」到 view 中,例如


//在某個 Controller 裡面的 method

$hello = "Hello World"

$this->set('post', $hello);
這個動作可以把 Hello World 這個字串傳到 view ,變成 $post 變數,當在 view 中執行 echo $post 的時候,會印出 Hello World 。

至於 view 的寫法,




文章列表

標題時間譯者
link($post['Post']['post_title'], "/posts/view/".$post['Post']['ID']); ?>
這樣就是一個 view 。而 view 擺放的路徑則因 Controller 而定,

view 的檔名則隨著 Controller 的 Method 而定,例如 Posts::index() 的 view 就是

/views/posts/index.ctp ,而 Posts::view() 的 view 則是 /view/posts/view.ctp。



常見問題

Q: 如何替换cake默认的layout(全局模板页)?
A: 把在/cake/libs/view/templates/layouts/default.ctp 复制到
/app/views/layouts/default.ctp ,然后按需修改


Q: 如何获取由$form->input(‘var’)提交的数据?
A: 在controller中通过$this->params['url']['data'][$this->controller->modelClass]['var'] 取得


Q: 如何建立不需要读取数据库的model?
A: 添加属性声明:var $useTable = false;


Q: 使用UTF8 库时出现乱码(页面和?菘舛际荱TF8,只是显示取出的数据时乱码)?
A: 在1.2x中:在/app/config/databases.php的配置中添加’encoding’ => ‘UTF8′,cake则会在执行SQL前先执行一次SET NAMES $encoding


Q: 如何建立一个公共的controller(如何使所有controller都有相同的属性或方法)?
A: 把/cake/app_controller.php 复制到 /app/app_controller.php ,按需修改即可。(为什么是放到/app目录下而不是/app/controllers中呢?)


Q: 如何建立一个公共的model(如何使所有model都有相同的属性或方法)?
A: 把/cake/app_model.php 复制到 /app/app_model.php,按需修改即可。(为什么是放到/app目录下而不是/app/moclels中呢?)


Q: 如何建立一个公共的helper(如何使所有helper都有相同的属性或方法)?
A: 同上,推理可得。


參考文獻: http://www.82cs.com/201008/04/cakephp_faq/
                  http://blog.roga.tw/2008/11/16/1178

沒有留言:

張貼留言