新年新氣象,CakePHP也換新裝

Posted on 2008-01-03 10:16:10 by

新的一年到了,CakePHP也換上新的佈景,更發佈了 CakePHP 1.2 的 Beta 版了唷!

全文轉自 TWPUG

CakePHP 開發團隊祝福每個人新年快樂!在進入程式開發的第三年,回顧一下已經完成的事情;一年前, Cake 1.2 開發版本推出,開發團隊持續努力讓新功能穩定,也提供一個成長中的開發平台。開發團隊的目的是提供最簡單的程式架構,這個目的即將完成,開發團隊對於能夠 分享這個成果給所有人感到驕傲,儘管過程波折不斷。

今年開發團隊願與您分享 CakePHP 1.2 Beta,開發團隊認為這是目前最好的版本;新功能讓使用 Cake 成為一種樂趣,經過了一段時間的開發後,開發團隊認為這些功能已經趨於成熟,他們一直在實用性與擴充性之間找尋平衡點。當然,這跟 1.1 版有很多的差異,但是許多在 1.1 版開發的程式碼應該都能在 1.2 版運行,在必要的地方程式會提供警告,而必須捨棄的部份開發團隊也將它細分後提供優雅的解決方案,讓升級 1.2 版不需要太多重大的改變,大部分的改變只需要藉由錯誤訊息的提示進行搜尋與置換即可。

 

CakePHP 1.2.0.6311 & 1.1.19.6305 推出

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

安裝與使用PhpDocumentor

Posted on 2007-11-06 10:55:34 by

寫文件是一個程式設計師最最痛苦的事情之一,尤其是寫了一堆程式後有人要你把 Function ,Class 等等等等,寫成一份文件。

這事情不管你是寫 c/c++ , perl , ruby , php 都不例外。

phpDocumentor 是我們的救星! 只要在寫程式的時候,乖乖的寫一點註解,寫一點範例,多一點說明,注意一下格式,等到程式完工後,只要一個指令,就可以立刻把全部程式的說明文件產生出來,而且還有多種樣式可以選擇,甚至可以作成  PDF , CHM 喔...

好了,屁話不多說,先來說說怎麼裝上這好用的東西吧...

phpDocumentor 本身已經是 pear 的成員之一,所以安裝的時候只要用 pear 來安裝即可(以下範例為在 Windows 下進行,以後再補上 LInux 下的)

--如果你已經有裝 php 跟 pear 請跳過--

首先假設我把我的的 php 安裝路徑在 d:\php\

也就是說我從 www.php.net 下載了最新的 php win32 安裝檔案,解開後放在 d:\php\

那麼這個目錄下面應該有 d:\php\PEAR這個目錄,但是當你進去看的時候,你會發現好像沒有 PEAR 相關程式庫阿...

沒錯,這個時候你還沒有安裝 PEAR 請先用 go-pear.php 安裝基本 pear 環境。

那麼在 d:\php 目錄下有一個檔案,叫做 go-pear.bat 請開一個 cmd 視窗去執行他,中間會有一些問題,基本上都照預設值去跑就可以了...

跑玩後,你的 pear 應該會被安裝在 d:\php\PEAR\pear 下面,而幫助你安裝其他 pear 套件的 pear.bat 則在 d:\php\PEAR下面

--安使安裝 phpDocumentor --

安裝 phpDocumentor 的過程也很簡單,只要利用 pear.bat 即可!

使用指令如下

d:\php\PEAR\pear.bat install -o PhpDocumentor

當中有多下一個 -o 的參數,意思是要 pear 把相依的套件也一起下載安裝。

安裝完成後 d:\php\PEAR 下面應該會多一個 phpdoc.bat 的批次檔,我們就可以用這個批次檔來產生我們的文件。

-- 使用 phpdoc.bat 產生文件 --

產生文件的方式我通常只有用下面一行指令解決:

d:\php\PEAR\phpdoc.bat -o HTML:Smarty:PHP -d d:\myProject\php_source\ -t d:\myProject\docs

這樣子的意思是說,採用 HTML:Smarty:PHP 的樣板格式,然後原始碼目錄在 d:\myProject\php_source\ ,接著把產生的文件放在 d:\myProject\docs 底下。

當中若是你只要對一個檔案作文件的話,可以把 -d 改成 -f 然後後面接的著就是指定的檔名。

樣板的格式基本上有 HTML, XML, PDF, CHM 四大類別,通常我用的都是 HTML:Smarty:PHP 這個,因為他比較好看!

另外還有就是 CHM:default:default 這個.用來產生 chm 的,不過他產生出來的是 .hhp 檔案,也就是還沒有經過 HTML helper 編譯過的檔案,所以要另外安裝 HTML Helper 來編譯 hhp 檔案就可以產生你要的檔案。

-- 最後來說一下怎麼寫註解 --

phpDocumentor 的註解有一定的規格,但是都跟我們原來寫註解的方式很像,只是要注意一下東西而已。

簡單的來看個範例好了

<?php
/**
 * 這裡是這個物件的說明
 * 可以多行喔!~
 *
 */
class MyClass {
    /**
     * 這裡是變數的說明
     *
     * @var int
     */
    var $a ;
    /**
     * 這裡是變數的說明.
     *
     * @var string 這裡也可以放說明
     */
    var $b ;
    
    /**
     * 這是針對函式的說明
     * 也是一樣可以多行
     * 若是簡單的範例也可以放這裡
     *
     * @param int $a 可以放入傳入的型態
     * @return array 可以說明回傳的型態
     */
    function first ( $a ) {
        return array();
    }
}
?>

基本上都是在

/*
*
*/

中間寫註解,別忘了每行前面要有個 * 喔!

註解比較常用到參數的應該是
@author 程式作者名稱,聯絡方式
@const 常數
@deprecate 不建議使用的 API
@global 全域變數
@param 函數的參數
@return 回傳值
@see 可參考函數
@since 開始時間
@static 靜態變數
@var 物件成員變數
@todo 計畫中要進行的項目
 

更多更詳細的資料請到 http://www.phpdoc.org/ 看囉!~

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

CakePHP 1.2 pre-beta 釋出...

Posted on 2007-10-23 10:39:24 by

昨天 CakePHP 釋出了最新的 Release ...
其中比較受關注的是 1.2 已經進入 Pre-Beta 的階段.

有 1.1 的更新
Stable: 1.1.18.5850

也有 1.2 的 Pre-Beta
Pre-Beta: 1.2.0.5875 pre-beta

這次的 1.2 中有不少更新,有使用1.2的朋友可要多注意看看唷!~
詳情可以看這裡...New CakePHP Releases

Happy Bake!..

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

會員系統-上篇

Posted on 2007-10-21 19:48:41 by

一般來說,大部分的網站都會有會員系統的架構,而很多的功能也都依賴著會員系統來區分不同的使用者,還有保存使用者的設定值,個人環境設定等。
所以我們第一個內容就是建立一個簡易的會員系統。

一般會員系統通常會有以下幾個基本功能:

  1. 會員註冊
  2. 會員登入
  3. 會員登出
  4. 會員資料修改


所以我們現在要建立的基本功能就以上面這四項目為主。

首先我們從資料表開始,會員資料表我們先簡單的建立如下的資料表,只要能保存使用者的帳號,密碼,最後一次登入來源,時間,帳號建立時間。
所以我們的資料表應該會長的像是這樣:

會員資料表 members
id int,auto_increment
username varchar(20)
password varchar(50)
email varchar(100)
last_login_ip
 
varchar(15)
last_login_datetime datetime
created datetime


接著我們建立對應使用的會員 Model

<?php
class Member extends AppModel {

    var $name = 'Member';
    var $validate = array(
    'usernmae' => VALID_NOT_EMPTY,
    'password' => VALID_NOT_EMPTY
    );


    /**
     * 使用者登入檢查
     *
     * @param string $username
     * @param string $password
     * @return array
     */
    function login($username,$password){
        $login_data = array('username'=>$username,
            'password' => md5($password)
        );
        $rows = $this->find($login_data);
        if (count($rows) > 0) {
            $this->id = $rows['id'];
            $rows['last_login_ip'] = $_SERVER['REMOTE_ADDR'];
            $rows['last_login_datetime'] = date('Y-m-d H:i:s');
            $this->save($rows);
            return $rows;
        }else{
            return false;
        }
    }
   
    /**
     * 保存一名註冊的新使用者
     *
     * @param array $data
     * @return bool
     */
    function registe_new($data){
        $this->create();
        return $this->save($data);
    }
   
    /**
     * 更新一名使用者的資料
     *
     * @param array $data
     * @return bool
     */
    function update_user_data($data){
        return $this->save($data);
    }
}
?>

以上的資料,我們基本都用 CakePHP 內建的功能完成。

接著是 Contoller 的部份,也就是負責邏輯流程的部份。

<?php
class MembersController extends AppController {
    var $name = 'Members';

    function modify(){
        if (!empty($this->data)) {
            $this->cleanUpFields();
            if ($this->Member->update_user_data($this->data)) {
                $this->Session->setFlash('您的資料已經更新完成!');
                exit;
            }else{
                $this->Session->setFlash('更新資料失敗,請檢查資料是否有錯誤。');
                $this->render('modify');
                exit;
            }
        }else{
            $this->render('modify');
            exit;
        }
    }
   
    /**
     * 使用者註冊表單。
     *
     */
    function register(){
        if (!empty($this->data)) {
            $this->cleanUpFields();
            if ($this->Member->save($this->data)) {
                if ($this->params['ret_url']) {
                    $ret_url = $this->params['ret_url'];
                    $this->flash('您已經註冊完成!',$ret_url,5);
                }else {
                    $this->flash('您已經註冊完成!','/',5);
                }
                exit;
            }else{
                $this->Session->setFlash('註冊失敗,請檢查您輸入的資料。');
                $this->render('register_form');
                exit;
            }
        }else{
            $this->render('register_form');
        }
    }

    /**
     * 使用者註冊功能,若是沒有 Post 資料進來,就直接秀出登入表單
     *
     */
    function login(){
        if (!empty($this->data)) {
            $this->cleanUpFields();
            if ($member_data = $this->Member->login($this->data['username'],$this->data['password'])) {
                if ($this->params['ret_url']) {
                    $ret_url = $this->params['ret_url'];
                    $this->redirect($ret_url);
                }else {
                    $this->flash('您已經登入完成!','/',5);
                }
                exit;
            }else{
                $this->render('login_form');
                exit;
            }
        }else{
            $this->render('login_form');
        }
    }

    /**
     * 使用者登出功能,只要刪除Session中的使用者資料即可。
     * 完成後導回首頁。
     *
     */
    function logout(){
        $this->Session->del('memberInfo');
        $this->flash('您已經登出,感謝您的使用!','/');
    }
}
?>

下篇我們將繼續view的部份的說明.

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

一份介紹 CakePHP 1.2 的 PDF

Posted on 2007-10-07 23:29:00 by

內容很多,幾乎把 CakePHP 1.2 上很多重要的新東西都講到的,看完了很心動很想馬上來試試看阿!
http://www.cakephp.org/files/OCPHP.pdf

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

del.icio.us 改用 Symfony 架構整個網站

Posted on 2007-10-04 21:45:28 by

網站製作學習誌 看到的消息...

國外知名的書籤網站 http://del.icio.us/ 已經在十月初期重新建構了網站程式,採用的是 Symfony 這套 PHP Framework ..

相關文章請看..
http://blog.phpdeveloper.co.nz/2007/10/03/delicious-switches-to-symfony/
http://www.symfony-project.com/blog/2007/10/02/delicious-preview-built-with-symfony

看樣子最近已經有越來越多網站開始重視使用的 PHP Framework 囉!...
目前比較有名一點的,我想大概就是 SymfonyCakePHP Zend Framework 這三套吧!~
對 PHP 有研究的朋友,別忘了試試看唷!

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

在虛擬主機上安裝CakePHP

Posted on 2007-09-07 15:50:12 by

也很久沒有寫 CakePHP 的文章,稍微來寫一下。

有朋友會需要使用虛擬主機來幫朋友或是客戶等架設網站,若是要用 CakePHP 的話,當然會希望能簡單,安全。

若是直接把整個 CakePHP 解在虛擬主機的 DocumentRoot 下面的話,網站連結就要變成 http://xxxx.com.tw/app/controller/action 這樣子,感覺很奇怪...

且有時候已經有現成的網站,你要用 CakePHP 幫他寫一些功能的話,或許會覺得不知道該怎麼處理。

這裡提供一個我目前使用到的解決的方法。

首先,先把CakePHP下載後解開放入一個目錄中,假設是 CakeSystem 這個目錄好了。

然後我把 CakeSystem/app/webroot 目錄下的東西,作一些修改。

首先是 index.php ,我會先將這個檔案改名字,例如叫做 run.php 。

然後開啟這個檔案修改一下:

if (!defined('ROOT')) {
//define('ROOT', 'FULL PATH TO DIRECTORY WHERE APP DIRECTORY IS LOCATED DO NOT ADD A TRAILING DIRECTORY SEPARATOR';
//You should also use the DS define to seperate your directories
define('ROOT', dirname(__FILE__)."/CakeSystem/");
}
if (!defined('APP_DIR')) {
//define('APP_DIR', 'DIRECTORY NAME OF APPLICATION';
define('APP_DIR', 'app');
}

然後修改一下 .htaccess:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ main.php?url=$1 [QSA,L]

這樣基本上就好了,然後把 webroot 目錄下的東西統統拷貝到 DocumentRoot 下面....

只要虛擬主機有支援 mod_rewrite 應該就可以用 http://xxx.com.tw/controller/action 來執行 cakephp 的程式...

而原來 index.php 等其他的 也不會受到影響...

然後為了安全的部份,我們修改一下 CakeSystem/.htaccess,來禁止所有的人不能直接存取 CakeSystem 裡面的東西.

Order deny,allow
Deny from all

不過在 Dreamhost 或是 public_html 才是網頁 DocumentRoot 的話,當然也可以把 CakeSystem 放在 DocumentRoot 以外的地方,這樣會比較安全...

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

admin route 強迫使用 https 連線

Posted on 2007-02-02 11:15:51 by

目前大部分的電子商務網站,大部分後台都是直接就在線上的某個路徑下,或是某個 subdomain 下 ....

而客戶對於安全的需求,有時後會要求全部後台使用 SSL 進行連線。

所以就誕生了下面我用的這段 Code ..
In bootstrap.php
代碼:
if(substr($_GET["url"],0,6) == CAKE_ADMIN.'/' and empty($_SERVER['HTTPS']) ){
   header('Location: https://'.$_SERVER["HTTP_HOST"].'/'.CAKE_ADMIN.'/');
}

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

CakePHP 中文文件!

Posted on 2007-01-04 11:14:20 by

感謝 clarliao 的貢獻~

clarliao 利用 CakePHP 寫了一個網站,內容是 CakePHP manual 的翻譯文件。

我只想說『clarliao 你真是幹得太好了!!!!』 

如果你正在使用或是正想學 CakePHP 的話,一定不要忘記上去看這個網站唷!!!

http://www.ezluk.org/

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

CakePHP svn 路徑變更

Posted on 2007-01-03 19:38:15 by

剛剛要 svn up 我的 CakePHP 程式庫的時候發現,怎麼會跟我說不能更新呢?

查了下發現,CakePHP 於 2006/12/25 的時候變更了 svn 裡面的目錄位置,把 dev 版本跟 stable 版本分開了...

分別是

  • Stable 版本 https://svn.cakephp.org/repo/trunk/cake/1.1.x.x
  • Development 版本 https://svn.cakephp.org/repo/trunk/cake/1.2.x.x
有在使用的朋友要記得也要更新一下唷...

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

重新用 CakePHP 寫 Blog System ...

Posted on 2006-12-24 13:17:47 by

好吧,目前的整個環境還非常的粗糙。

但是基本上該有的都有了,應該是可以先頂一下子,不過迴響功能還沒有寫也還沒能打開。

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

上次的 CakePHP 簡報與 Easys5 的程式碼.

Posted on 2006-10-11 15:13:50 by

竟然忘記放上來。

現在馬上補上~

 
簡報 cakephp_s5.zip

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

CakePHP 的 HasMany 自動存檔...

Posted on 2006-09-13 17:39:01 by

剛剛跟 thegiive 聊天的時候,他問了我一個CakePHP的問題。

CakePHP 的 model 能自動 save hasMany 的 entry 嗎?

經過測試後發現似乎沒有辦法。

不過還是可以經由修改 model  做到類似的功能。

在所建立的 model 中加入一個 function , afterSave ,afterSave 是 Model 的 CallBack Function ...

在save後會自動被呼叫。

寫入類似下列的 內容,假設我是 hasmany 一個 Post 的 model ...

    function afterSave(){
        if ($user_id = $this->getLastInsertID()){
            foreach ($this->data['Post'] as $val){
                $this->Post->create();
                $data['Post'] = $val;
                $data['Post']['user_id'] = $user_id;
                $this->Post->save($data);
                unset($data);
            }
        }
    }

這樣子在存檔的時候,只要輸入的資料是類似這樣...

date => Array
(
[User] => Array
(
[name] => Darkhero
[email] => darkhero@gmail.com
)

[Post] => Array
(
[0] => Array
(
[title] => test1
[content] => content1
)

[1] => Array
(
[title] => test2
[content] => content2
)

[2] => Array
(
[title] => test3
[content] => content3
)
)
)
--
去 cakephp 的 irc 問了才知道有 model::create 初始化一個物件,所以重新改一下程式碼... 
[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

在 CakePHP 中用 Smarty!!

Posted on 2006-09-12 16:21:16 by

等了好久,終於有比較好的解決方案了!

http://projects.simpleteq.com/CakePHP/smarty.html

直接把 Smarty  繼承 View 作成了 SmartyView,也可以在 tpl 中直接用 {$html->url()}...

 

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

CakePHP 的簡易使用者認證

Posted on 2006-09-08 16:34:39 by

剛剛在逛網站的時候看到的。

CakePHP 範例: 簡易使用者認證
http://987.tw/home/p2_articleid/18

很棒的一篇翻譯文章,清楚明白,若是想找簡單的使用者認證功能,可以參考這篇喔!~ 

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

TinyMce for CakePHP

Posted on 2006-09-08 16:22:50 by

之前我在 CakePHP 中用的都是 FCKeditor ,最近則越看TinyMCE越順眼,所以找了一下有沒有 TinyMCE for TinyMCE 的文章...

http://cakephp.org/pastes/show/cf924a342aa55ba3cfe3aea6cb1ed29b 

實作方式如下:

  1. 先將 TinyMCE 下載後解開.
  2. 將 TinyMce中 jscript 目錄下的 tiny_mce 完整的考貝到 WEBROOT/js/ 下.
  3. 在你的layout中,修改 default.thtml (如果你有用其他的也跟著修改吧~) ,在 <head></head> 中間加入
    <?php
    if
    (isset($javascript)):
            echo $javascript->link('tiny_mce/tiny_mce.js');
    endif
    ;
    ?>
  4. 最後在你的有需要用到 tinymce的網頁,例如 add.thtml 跟 edit.thtml  加入下列javascript
    <?php
    <script language
    ="javascript" type="text/javascript">
    tinyMCE.init({
        theme : "advanced",
        mode : "textareas"
    }
    );
    </script>

    ?>
  5. 看看你的新增修改頁面是否已經自動把tinymce啟動了呢~
[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

CakePHP 與 MySQL 4.1(以上到5.0)

Posted on 2006-09-01 18:08:22 by

這幾周很忙,加上這兩天身體很不舒服,整天都是頭暈眼睛痛的狀態,根本無法做事情,所以寫點簡單的東西好了。

MySQL 4.1 以上由於有字元編碼設定的問題,所以所有的PHP程式都需要跑一下 set names xxx ...(關於編碼的問題請看MySQL 中文編碼徹底研究

而CakePHP的編碼設定要放在哪呢?

根據網路一陣搜索,找到的比較好的方法是利用自建的 app_model.php 來完成.

[@more@]

在你的app目錄下,加上一個檔案,app_model.php(也可以從/cake/拷貝過來)

裡面應該有個空的物件

class AppModel extends Model
{}


這個檔案是用來讓自己建立額外的AppModel function 用的...

我們要加上自動送出 set names utf8 的話要這樣作...

class AppModel extends Model{
function __construct(){
parent::__construct();
$this->execute('set names utf8');
}
}


當然,如果你用的是 big5 ,就要改用 set names big5 喔..~

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

CakePHP::HTMLHelper 的 Radio

Posted on 2006-08-22 11:53:25 by

CakePHP 有時候他的文件真的有點給他混亂∼

昨天在找CheckBox跟Radio的checked該怎麼設定,文件看了半天還是不知道是怎麼設,猜想應該是在Attrib參數中,但是怎麼也想不透要怎麼寫。

到最後只好翻 Irc log 跟查 source code ,這才知道『直接在attrib array 中的 value 內填入要 checked 的 value』就好了。

實際的情況會像是這樣...

$html->radio('User/sex',array('m'=>'男','f'=>'女'),null,array('value'=>'m'));

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

轉貼 Using ZendFramework in CakePHP

Posted on 2006-08-16 14:24:31 by

這篇文章很不錯喔,在TWPUG上看到的轉貼,在這裡紀錄一下。

http://hades.phparch.com/ceres/public/article/index.php/art::cakephp::zf_components_in_cake

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

CakePHP HTML Email 發送...

Posted on 2006-08-16 14:11:41 by

其實一般的 email 用 mail function 就可以發了,但是通常我們會要的更多,例如有表格拉,或是特殊字要有字型或是顏色變化等。這時候就需要用到 html email

可以先參考這篇 http://wiki.cakephp.org/tutorials:sending_email。

不過在我實際運作的時候這個會有一點問題,像是內含圖片的複雜 html 似乎會無法正常顯現。

所以我改用了 PEAR::Mail 來作為主要發送工具,另外利用 Mail:mime 作為email內容產生。

以下是我自己改的程式碼,不過要注意的是,必須先自己在 vendor中建立 pear 得程式庫。

<?php
class EmailComponent
{
var $tpl;
var $to = null;
var $from = null;
var $subject = null;
var $cc = null;
var $bcc = null;
var $controller;

function message()
{
ob_start();
$this->controller->render($this->tpl,($this->controller->layout == 'ajax'? 'ajax':'email'));
$mail = ob_get_clean();
return $mail;
}

function send()
{
vendor('pear/Mail');
vendor('pear/Mail/mime');
$crlf = "n";

$html = $this->message();
$hdrs = array(
'From' => $this->from,
'CC' => $this->cc,
'BCC' => $this->bcc,
'Subject' => $this->subject,
'Content-type' => 'text/html; charset=UTF-8'
);
$mime = new Mail_mime($crlf);
$mime->setHTMLBody($html);
$body = $mime->get();
$hdrs = $mime->headers($hdrs);
$mail =& Mail::factory('sendmail');
$success = $mail->send($this->to, $hdrs, $body);

return $success;
}
}
?>

另外可以參考的文章是這篇:http://wiki.cakephp.org/tutorials:sending_email_with_phpmailer

不過我還沒有時間測試,所以也不知道會怎樣囉∼

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

在 Element 中使用 model

Posted on 2006-07-29 23:40:56 by

在做網站的時候常常會用到重複使用的區塊。

這個時候我們會用到 view 的 element 來做這類的東西,像是選單拉,一些廣告區拉等等。

但是若在 Element 中想要用Model去取得資料庫中的資料(例如製作動態選單)該怎麼做呢?

[@more@]

事實上作法很簡單。


例如我要呼叫Post這個Model,只要 <?php $myModel = new Post(); ?> 就好了,這樣你就可以直接在這個 Element 中使用這個 Post model 。

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

[CakePHP]利用 hasAny 找出有沒有重複值

Posted on 2006-07-24 20:44:56 by

請參考http://wiki.cakephp.org/tutorials:duplicate_record_validation?s=hasany


你可以在 model 中加入類似這樣的自訂 function (範例為帳號名稱檢查)

class User extends AppModel
{
function isUnique($userName)
{
$userNames['User.username'] = $userName;

if ($this->hasAny($userNames))
{
$this->invalidate('userNameExists');

return false;
}
else
{
return true;
}
}
}
而 view 中則加入這個errorTag
$html->tagErrorMsg('User/userNameExists', '帳號已經註冊過囉,請重新選額一個帳號.')
[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

CakePHP 進階資料檢驗..

Posted on 2006-07-24 20:34:43 by

一般來說 CakePHP 中,在 model->save() 的時候,會自動根據$model->validate 的陣列進行檢查,若是沒通過則不會 Save 會丟回來一個 false 。

但是我們若是只想要檢查而沒有要存檔呢?

又或者我們自訂 errorTag 要怎麼顯示呢?

[@more@]

第一個問題可以從 Model 的 function 中找到解答

你可以用 $model->validates($data_array) 進行檢查。

而檢查完成後也是從 $controller->validateErrors($this->Model) 來assign 指定的 model 的錯誤檢查錯誤訊息回報。

另外若是有特殊的 errorTag 則可以用 $model->invalidate('tag_name') 來指定顯示...下面是一個檢查使用者帳號重複後的指定範例。

if ($this->find("username = '".$data['Member']['username']."'")) {
$this->invalidate('username_inuse');
return false;
}

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

Cakephp svn 連結變成亂碼~

Posted on 2006-07-15 10:46:07 by

因為我目前都是直接 svn Cakephp 來使用的。

在昨天更新後,解決了 data 的欄位無法正確帶入值得問題,但是卻發生了原來正常的Link變成了亂碼∼

因為那些Link都是用 $html->link(); 去產生的,所以立刻就懷疑 cakephp 的 helper 有做了修改。

在 /cake/libs/view/helpers/html.php 中大約第 160 行的地方可以看到.....

function link($title, $url = null, $htmlAttributes = null, $confirmMessage = false, $escapeTitle = true, $return = false)

接著我又去查了 svn log 看最近 html.php 有那些修改...
--- html.php (revision 33)
+++ html.php (local)
@@ -159,12 +159,12 @@
*/
function link($title, $url = null, $htmlAttributes = null, $confirmMessage = false, $escapeTitle = true, $return = false) {
if ($escapeTitle) {
- $title = htmlspecialchars($title, ENT_QUOTES);
+ $title = htmlentities($title, ENT_QUOTES);
}
$url = $url ? $url : $title;

if ($confirmMessage) {
- $confirmMessage = htmlspecialchars($confirmMessage, ENT_NOQUOTES);
+ $confirmMessage = htmlentities($confirmMessage, ENT_NOQUOTES);
$confirmMessage = str_replace("'", "'", $confirmMessage);
$confirmMessage = str_replace('"', '"', $confirmMessage);
$htmlAttributes['onclick']="return confirm('{$confirmMessage}');";


真糟糕..他竟然把escapeTitle 從 htmlspecialchars 改成用 htmlentities ...

看樣子只有幾個方法解決..不是自己改回來...
或是替htmlentities 加入語系參數了...

補充: Big5 才會這樣子....[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

cakephp 建議安裝方式

Posted on 2006-07-15 10:45:57 by

參考 http://manual.cakephp.org/chapter/3 的建議安裝方式..
安裝方式基本上有分下面幾種.
1. 一般安裝.
2. Production Setup
3. Advanced Setup: Alternative Installation Options

1. 只要將 cakephp 放在 DocumentRoot 即可.
2. 只要將 DocumentRoot 指到 cakephp_install_path/app/webroot/ 即可.

3. 最麻煩但是也最安全.
3.1 建立 /usr/local/lib/cake
3.2 將 cake_install_path/cake 複製到 /usr/local/lib/cake/
3.3 利用 bake.php 建立 project 例如放在 /home/me/cake_site/myproject
3.4 將 /home/me/cake_site/myproject/webroot/* 複製到 DocumentRoot
3.5 修改 DocumentRoot/index.php
代碼:

if (!defined('ROOT'))
{
define('ROOT', '/home/me/cake_site/');
}

if (!defined('APP_DIR'))
{
define ('APP_DIR', 'myproject');
}

if (!defined('CAKE_CORE_INCLUDE_PATH'))
{
define('CAKE_CORE_INCLUDE_PATH', '/usr/local/lib/cake/');
}

3.6 開啟瀏覽器檢視網頁.看是否可以正確執行你的cakephp囉.
[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

cakephp admin 設定

Posted on 2006-07-15 10:44:25 by

新版的 Cakephp 的 core.php 中多了滿多東西。
其中有個
/**
* Uncomment the define below to use cake built in admin routes.
* You can set this value to anything you want.
* All methods related to the admin route should be prefixed with the
* name you set CAKE_ADMIN to.
* For example: admin_index, admin_edit
*/
// define('CAKE_ADMIN', 'admin');
只要設定了這個後,就可以使用 http://domain/admin/controller/action 去呼叫
controller 中的 admin_action 作為 管理用的 action .
[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

CakePHP bake.php Quick Start..

Posted on 2006-05-17 12:41:47 by

這個也要寫下來,不然過兩天可能也忘了..

bake.php 是 cakephp 中的一隻 command line script
用途是來快速建立 app, model, controller, view 樣版

bake.php 的位置在 /[cake_install_dir]/cake
/scripts/bake.php
執行方式 php cake/scripts/bake.php
當然你也可以 chmod 755 cake/scripts/bake.php
這樣以後就直接 cake/scripts/bake.php
我個人是比較懶, 所以多設了個
alias bake=[path_to_cakephp_install]/cake/scripts/bake.php
這樣以後就 bake 就好了

也可以參考 http://cakephp.org/pages/screencasts 的
Building the Bakery: Part 1


1. 建立 project 基本環境
bake -project 目錄絕對位置
若是初期開發,可以直接這樣
bake -project /[path_to_cakephp_install]/myprj
接下來 bake 會跑一下..然後你就會在
/[path_to_cakephp_install]/ 看到 myprj 目錄, 裏面有預先建立的環境

接下來的指令都要用
bake -app myprj (他會自動去找/[path_to_cakephp_install]/myprj/)

2. 設定資料庫
第一次跑 bake -app myprj 的時候,bake 會提示你他無法找到資料庫.
所以會請你設定資料庫,預設是使用 MySQL .
依照對話設定 mysql 的 username, password, database name
確認後就會自動存檔.

3. 建立 model
完成後就會進入3個選擇 分別是 1 models, 2 controllers, 3 views
先選擇 1, models
bake 會自動連上資料庫取得資料庫目前的資料表,並且列表出來供選擇.
選擇了你要建立的 model 後就是一連串的問答。
當中會包括, 欄位資料檢查方式, 資料關聯檢查(基本上會自動偵測,
但是也會有出槌找錯或是找不到的情況)
最後確認建立就可以了.

4. 建立 controller
再次執行 bake -app myprj
選擇 建立 controller
他會請你輸入 Controller 名稱.
接下來也是一堆的問達.
比較重要的在於他會問你要不要幫你建立基本的
index, view, edit, add, delete
一般來說我都是選 yes, 然後之後再手動改 controller

5. 建立 view
這部份就很簡單,
他只會問你兩個問題...
第二個是問你要不要建立 index.thtml, view,thtml, add,thtml, view.thtml
就給他選 yes 吧...

備註: 建立 model, controller, view 的時候最後都會問你要不要建立 test 環境
不過由於我沒用 test 環境,所以都直接選 no .

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

CakePHP 命名規則...

Posted on 2006-05-17 12:40:56 by

這東西..不寫起來一定會忘記...

資料表:
表格名稱 英文小寫,用復數表示,以底線分格單字 (posts,forums,tags)
第一個欄位 命名需為 id, 數值, 自動編號, Primary Key (id)
與其他表格對應的 key 以 modelname_id, 數值, Index Key (forum_id)

多對多對應關係 (hasAndBelongsToMeny) 中間資料表以 posts_tags 命名
一樣要設定 primary key (id)
內部索引值命名法同上.(post_id,tag_id)

Model: (/CakeAppDir/models/)
檔名 英文小寫,以資料表名稱(單數型)命名 (post.php,forum.php,tag.php)
Model名稱以資料表名稱(單數型)命名,英文單字字首大寫 (Post,Forum,Tag)
Model 注意像是 post_forums 的表格名稱 則以 PostForum 命名 Model
也就是去掉底線,單字字首大寫

Controller: (/CakeAppDir/controlls/)
檔名:
直接對應 Model : Model名稱加上s加上 _controller.php
(posts_controller.php)
一般的話
"Controller 名稱"加上 _controller.php (home_controller.php)

物件命名: 名稱(英文字首大寫)+Controller (PostsController)


View: (/CakeAppDir/views/)
若無指定 View 則 Controller 會自動找 Action 同名的 .thtml
/CakeAppDir/views/[controller
_name]/[action_name].thtml

Layout: (/CakeAppDir/view/layouts/)
若 controller 未指定,則使用 default.thtml 為預設 layout
flash.thtml 則為 controller 呼叫 flash 方法的時候的預設 layout
[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi

CakePHP ....

Posted on 2006-05-12 01:57:25 by

最近都在玩 CakePHP...

他是一套從 RoR 啟發而來的 PHP Framework..

主要就是開發快速,減少很多設定與程式碼的撰寫。

我還在摸索的階段,不知道那時候才能用他寫個不錯的東西呢?

自己也有想過要整理自己的 Framework ...不過,還是慢慢來吧,總是要一點點累積的...

[@more@]

Tags:

加入書籤: 收藏這篇文章到HEMiDEMi