redirects… as mainland China blocks wordpress.com..
我最近在看 code generation in action, 其實是 CakePHP 的 bake 提起了我對code generation 的興趣, 然後我的 subscription 又看到有關 RoR 很多靈感都是來自這書, 便借了一本來看.
只看到第4Chapter 的中間, 但….總覺得很難應用於project 上面, 是我的 project 太小型? 努力看下去再update 大家
另外, deployment 永遠都是大難的日子, 特別是開發時沒有想過deployment 的code, 真的很煩, 開新的project, 下手寫code 之前, 一定要記得將deployment management 先想好, 特別是DB 應用很重的, config 會寫到DB的, 更是麻煩中的麻煩… (Drupal 等的CMS 的不例外…)
Security Component 會遇到的問題還真的不是一般的少
今天的問題是,做了一頁form, 沒有使用自定義的form inputs, 但 submit 時仍然出現404 的 error. 我這個form 只有3 個 input, 兩個 dropdown box, 一個disabled 的field,
<?php
echo $form->create('pages',array('url'=>'/pages/add'));
echo $form->input('env',array('label'=>'Add to','default'=>'woo','disabled'=>'disabled'));
echo $form->label('current');
echo $form->select('current',array(1,2,3));
echo $form->label('day');
echo $form->select('day',array(1,2,3,4,5,6,7,8,9,10));
echo $form->label('trip');
echo $form->select('trip',array(1,2,3));
echo $form->end('Add');
?>
顯示一個打算read only 的 field. 我一個一個將它們移除, 發覺問題出現在disable 的field 內.
google 一下, https://trac.cakephp.org/ticket/3997 發覺Security component 是不支持 disbaled field 的.. ticket 內有一些說明, 但… 一年多的ticket 呀…
原文地址http://www.phpv.net/html/1443.html
ASCII(str) str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。
mysql> select ASCII('2');
-> 50
mysql> select ASCII(2);
-> 50
mysql> select ASCII('dx');
-> 100
ORD(str)((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]返回字符的ASCII代码值来返回多字节字符代码。如果最左面的字符不是一个多字节字符。返回与ASCII()函数返回的相同值。
今天我在使用 gdata(來自 PHP Zend framework) 嘗試存取一段youtube video的影片的時候遇到了標題的error. 我使用了半個小時設定一個正確的 InstalltionChecker.php, 先排除我的伺服器已經裝有 php-xml libraries, ssl libraries, 但仍然無解. Google 沒有提供一個合用的答案.
最後我發現, 是youtube 判定該 video 違反了某些版權協定, 所以返回了 400錯誤碼, 正解是:
Security Component enable 了以後, 在 $form->end() 的時候會加一個 hash token. 這很容易理解, 就是用這個hash tag 證明這張表單的正確性. 但實際上這個hash 是如何產生?
API: http://api.cakephp.org/view_source/security-component/#line-612
簡明點說, 沒有timestamp , 但有form 的每一個field, field 的name attribute. 所以你不可以自己加 input tags. 例子:
<?php
//add.ctp
echo $form->create('page',array('url'=>$this->here));
echo $form->input('title');
echo $form->input('check',array('type'=>'checkbox'));
?>
<?php
echo $form->end('submit');
?>
便pass 不了有 security component 的 controller 了, 因為有一個field 不使用 $form->input()
第一眼看, 這樣沒有問題呀, 因為input 可以使用 $form->input(). 有很多設定(options)可以改變 input 的, div=>false, label=>false 等等. layout html 上應該沒有什麼限制
對, 所以我都只是找到一個情況會出亂子. 就是 checkbox:
Just another WordPress.com weblog
Advanced: http://mooncakephp.wordpress.com/2009/11/06/續-security-component/
今天遇到了一個特別的 bug, 在一個 add 頁面, page load 沒有問題,
但submit 的時候卻白畫面, 有進過 controller 的 beforeFilter(),
但沒有進過controller 的 add.
答案是 Security compoent enable 了, 因為沒有使用$form->end()
令頁面沒有提交一組 hidden 的 hash code, CakePHP 以為是安全問題, beforeFilter 之後就 filter 了….
cookbook:
When using the Security Component you must use the FormHelper to create your forms. The Security Component looks for certain indicators that are created and managed by the FormHelper (especially those created in create() and end()).
最後:

Admin site 結構
在嘗試 RESTful 的response 的時候, (其實只想 time.xml 返回xml, time.json 返回json 而已)
參考了cookbook: http://book.cakephp.org/view/477/The-Simple-Setup
API: http://api.cakephp.org/class/router#method-RouterparseExtensions
Router 內加一句, 再在 APP./views/{controller}/xml/time.ctp
便可以返回xml, 但問題是, html header 不是 text/xml, 而是一般的 text/html?
為什麼!!!!!
存在的意義:
將url /users/add 改成 /member/add 同樣可以存取
當然, 你還有很多其他的需要而需要修改存取的 url,
例如, SEO 的原因, 項目長的”就是不喜歡” 或者 “你不覺得 create 比 add 好?”
省一口氣, 寫一條 router 算吧了
所以, Router 救了程序員一命
特別是因為MVC frameworks(CakePHP 當然不例外) 都習慣使用controller 名為相對應的url
Router 其實就像 apache 的 .htaccess 一樣
你可以將一些目標字眼轉到 controller 的特定函數來處理
使用上也可以很簡單, 如果你的需求只是和上面的第一個意義一樣的話
例如,
存取 /time 改為 /pages/time:
Router::connect ('/time', array('controller'=>'pages', 'action'=>'time'));
存取/users/1 改為/users/view/1:
Router::connect ('/users/:id', array('controller'=>'users', 'action'=>'view'),array('id'=>'[0-9]+'));
不過也可以像正則表達式一樣複雜
最後一個警告, $this->Auth->allow() 內的函數是 controllers 內的函數名,
而不是 router 內的 url
CakePHP 在 bake controller 的時候, console 會詢問你會否使用 admin methods

Console
bake 就是令我覺得 cakePHP 比 其他 framework 好和快(指開發速度) 最重要的一環
其實它的功能就是建立各種各樣的模版
最常用就是建立 controller, model, views 的模版
先在database 建立一個眾數為名字的 table, 例如 administrators
建立好你想要的 fields 之後,
只需要 bake 一下, administrator 的 model, controller, views (add index, view, delete) 都幫你寫好了
其實根本不需要記得其他的 convention, 只需要記得 database table 用眾數便可以了

tree
上一張圖解釋了大部分連官方 cookbook 都很少提及旳設定
只要在 app 資料夾的同層建立一個新的資料夾, 再用 bake 在資料夾之內建立project
假設cake 資料夾放在webroot 之下, mooncake 的存取路徑是: http://localhost/cake/mooncake
而 http://localhost/cake 預設是 app 資料夾內的檔案
而我通常會再做多一步, 在 apache 的vhosts 內將 http://mooncake.localhost/ 的 DocumentRoot 指到 WEBROOT/cake/mooncake/webroot
再改windows 的 host file, 以方便開發

CakePHP
我在使用 CakePHP 之前已經有3-4 年的 PHP 經驗了
近年因為 frameworks 的興起, 我也在找尋一些可以配合快速開發的 PHP框架
以加速我的開發周期
其實只要 google 一下 PHP framework, 便有很多成熟的 framework 可以選擇
Zend, CodeIgniter, symfony… 而CakePHP 只是在第一頁的最尾
但我覺得 CakePHP是最開發快速的框架因為:
缺點:
因為我覺得 bake 實在太重要
完全 override 它的缺點, 所以便一直使用到現在了…
testing, testing
這會是我在使用 CakePHP 開發 web app 的時候的一些小留言, 既給自己留個底, 也希望會幫助到其他人, 回饋 CakePHP 社區.
cake schema run create
独立创建一个在schema文件中存在的表
cake schema run update
独立更新一个在schema文件中定义的表
cake schema view
查看schema文件的内容
cake schema generate <-f>
生成schema文件,-f 选项可以强制生成整个数据库表结构
cake schema dump
将schema文件转储为sql文件
引用
http://qeephp.com/bbs/viewthread.php?tid=25
本文通过一个实例讲述如何使用关系数据库来存储层次数据,
提供关系数据库存储结构分析图和相应的文档说明。
相关资源部分,提供本文的PDF文档下载。
相关资源
Cakephp的一个非常有意思的特色,就是,可以通过它的Model使用类似于findBy(Fields)这样的方法直接取得数据的调用,例如,我们可以直接取得ID为5的数据,可以这样:
/** 在Controller中,我们可以这样写 */ $data = $this->ModelName->findById(5); pr($data);
就这么简单,但是,你会发现Model里面根本没有findById这个函数。:)
我翻遍了Cakephp的源代码,都没有找到相关的设置,呵呵。
yoophi老师说,它使用了overload,overload是php提供的非常有魅力的功能,它可以使类执行一些自己根本没有定义的功能。
在PHP5中,我们可以这样使用它