中文

轉址..因為內地擋了 wrodpress.com …

redirects… as mainland China blocks wordpress.com..

http://cakephp.treetwo.com/

About Code generation and other stuff

我最近在看 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 的不例外…)

cakePHP Security Component – diabled field.

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 呀…

MySQL字符串函数大全

原文地址

http://www.phpv.net/html/1443.html

ASCII(str)
返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果strNULL,返回NULL
mysql> select ASCII('2');
        -> 50
mysql> select ASCII(2);
        -> 50
mysql> select ASCII('dx');
        -> 100

也可参见ORD()函数。

ORD(str)
如果字符串str最左面字符是一个多字节字符,通过以格式((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]返回字符的ASCII代码值来返回多字节字符代码。如果最左面的字符不是一个多字节字符。返回与ASCII()函数返回的相同值。

Uncaught exception ‘Zend_Gdata_App_HttpException’ with message ‘Expected response code 200, got 400

今天我在使用 gdata(來自 PHP Zend framework) 嘗試存取一段youtube video的影片的時候遇到了標題的error. 我使用了半個小時設定一個正確的 InstalltionChecker.php, 先排除我的伺服器已經裝有 php-xml libraries, ssl libraries, 但仍然無解. Google 沒有提供一個合用的答案.

最後我發現, 是youtube 判定該 video 違反了某些版權協定, 所以返回了 400錯誤碼, 正解是:

續 Security Component

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:

My findings on CakePHP

Just another WordPress.com weblog

CakePHP Security component

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()).

 

 

cakePHP admin pages setup

使用內建的 admin routing 的缺點:
1. 會使用同一個 model, 包括model 的 validation rules, beforeFilter(), beforeValidate() 等等
直接令model 的結構複雜化 (因為要同時照顧/考慮admin site)
2. deploy admin site 時也有機會影響到 normal site
因為修改的都是同一組files
第二個缺點還可以使用 test 來減少出錯
但共用 model 還真的是很麻煩
特別是同一組 validation rules, 因為 admin site 的 validation 通常都很鬆
而normal site 就很小心
所以我使用了另一個方法做 admin site, 就是開另一個admin project
bake: cake/console/cake bake project admin
再重新bake MVC

最後:

Admin site 結構

Admin site 結構

RESTful Router::parseExtensions()

在嘗試 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?

為什麼!!!!!

CakePHP path rewriter/SEO knife: Router

存在的意義:
將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

ref: http://book.cakephp.org/view/46/Routes-Configuration

Admin pages / Admin Routing

CakePHP 在 bake controller 的時候, console 會詢問你會否使用 admin methods

關於 bake..

Console

Console

bake 就是令我覺得 cakePHP 比 其他 framework 好和快(指開發速度) 最重要的一環

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

一個cakePHP 核心內設定多個應用 Config multiple sites in one CakePHP core

tree

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, 以方便開發

Why CakePHP

CakePHP

CakePHP

我在使用 CakePHP 之前已經有3-4 年的 PHP 經驗了

近年因為 frameworks 的興起, 我也在找尋一些可以配合快速開發的 PHP框架
以加速我的開發周期

其實只要 google 一下 PHP framework, 便有很多成熟的 framework 可以選擇
Zend, CodeIgniter, symfony… 而CakePHP 只是在第一頁的最尾
但我覺得 CakePHP是最開發快速的框架因為:

  • 有bake (非常重要!!!)
  • 有 scaffolding
  • 用 MVC model
  • build in test framework
  • rails like controller hook (雖然我沒有 rails 的經驗)
  • 功能上比較完備 (當然沒有到 Zend 的程度..)

缺點:

  • 相對慢的 framework (scalability 差一點點)
  • docs 相對少 (算還可以吧…)

因為我覺得 bake 實在太重要
完全 override 它的缺點, 所以便一直使用到現在了…

My first post on Cakephp

testing, testing

這會是我在使用 CakePHP 開發 web app 的時候的一些小留言, 既給自己留個底,  也希望會幫助到其他人, 回饋 CakePHP 社區.

Cakephp Schema命令

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文档下载。

存储层次结构

相关资源

数据库中存储层次数据(PDF)

Cakephp的魔法函数解析,findBy…

Cakephp的一个非常有意思的特色,就是,可以通过它的Model使用类似于findBy(Fields)这样的方法直接取得数据的调用,例如,我们可以直接取得ID为5的数据,可以这样:

/**
在Controller中,我们可以这样写
*/
$data = $this->ModelName->findById(5);
pr($data);

就这么简单,但是,你会发现Model里面根本没有findById这个函数。:)

我翻遍了Cakephp的源代码,都没有找到相关的设置,呵呵。

yoophi老师说,它使用了overload,overload是php提供的非常有魅力的功能,它可以使类执行一些自己根本没有定义的功能。

在PHP5中,我们可以这样使用它

Syndicate content