Cakephp 的 parameter傳遞的方式有點奇怪

33 views
Skip to first unread message

derekypp peng

unread,
Oct 31, 2010, 2:16:11 AM10/31/10
to zf...@googlegroups.com
大家好:

又有問題要麻煩大家了QQ
覺得Cakephp 的 parameter傳遞的方式有點奇怪

如果我用
$this->redirect(array("controller" => "products", 'action' => 'view',$id  ,"color_id" => $color_id ));

得到的新網址會是:

和以往看的的URL不太一樣
一般html應該會看到

不過發現color_id:36 這種參數的寫法
其實可以用 $this->params['named']['color_id'] 把它取出來

----------------------------------------------------------------------------

不過又當我再寫一個search Form的時候(get方法)

<?php echo $this->Form->create('Order',array('action'=>'index','type'=>'get'));?>
<?php echo $this->Form->input('color_id');  ?>
<?php echo $this->Form->end(__('確定', true));?>

又發現他傳出來的網址
又變回來了http://127.0.0.1:7070/buy/products/view/6?color_id=36
所以我取參數又變成了 $_GET['color_id']

這樣變成取參數,變的很複雜 因為要判斷網址到底哪種樣式
因為參數又很多 結果變成程式碼大亂了QQ..........

請問各位大大,是否也有遇到這類的問題?
大家是怎麼解決的呢?
謝謝



ㄚ凱

unread,
Nov 1, 2010, 4:17:03 AM11/1/10
to zf...@googlegroups.com
不管是用 zf or ci 都會有這類的問題...

用 get 取參數的方式通常在 cakephp 中不是用 $_GET ..
而是用 $this->params['url'] ....

主要是在於 zf , ci , cakephp 等都對於參數傳遞有自己的規範跟方法. 
通常是為了讓後面的程式好產生跟 router 好parse 吧..XD...另外就是為了讓搜索引擎比較簡單處理...

至於會不會混亂, 我想只要想清楚就好了...
理論上不至於...
因為不同的參數不同的用途... 



--
您已訂閱「Google 網上論壇」的「PHP Framework Study Group in Taiwan - PHP Framework 讀書會」群組,因此我們特別傳送這封郵件通知您。
如要在此群組張貼留言,請傳送電子郵件至 zf...@googlegroups.com
如要取消訂閱此群組,請傳送電子郵件至 zf-tw+un...@googlegroups.com
如需更多選項,請造訪此群組:http://groups.google.com/group/zf-tw?hl=zh-TW



--
若真的有心.不用靠別人一樣可以找到辦法.
如果不願意用心.我想說了也是白說.     
Darkhero (Kyle Chiang)
dark...@gmail.com
msn:dark...@gmail.com
skype:kylekai

derekypp peng

unread,
Nov 1, 2010, 11:12:42 AM11/1/10
to zf...@googlegroups.com
大家好:
    使用凱大建議的方式,以$this->params['url']來拿get的參數
    還是只對 http://127.0.0.1:7070/buy/products/view/6?color_id=36  有效耶

    這個時間用debug($this->params['url'])
    會拿到

Array

(
    [url] => products/view
    [color_id] => 36
)
color_id參數正確被識別
------------------------------------------------------------------------------

debug($this->params)   會拿到

Array
(
     [url] => products/view/color_id:xx
     [named] => Array
        (
            [color_id] => 36
        )

)

等於還是無法正確辦視參數,只把它當一般的網址看待
但是它變成params另一個array 叫named 所以要變成
先檢查params['url'] 有沒有這個參數 再跑去params['named']去檢查有沒有這個參數
不曉得是不是我用法搞錯了
還請各位大大指點一下了QQ

Caesar Chi

unread,
Nov 1, 2010, 12:36:58 PM11/1/10
to zf...@googlegroups.com

我猜一下,
buy是你的 project name
products 是你的controller
view 是你的 function 
如果你想要使用router 取得資料,可以試試看

用你的router 範例,
public function view(arg) {
    echo arg;
    exit

所以這樣子echo 出來的資料應該就是你要得,還可以將這些資訊帶到view裡面。


derekypp peng <dere...@gmail.com> 於 2010年11月1日下午11:12 寫道:
大家好:
    使用凱大建議的方式,以$this->params['url']來拿get的參數
    還是只對 http://127.0.0.1:7070/buy/products/view/6?color_id=36  有效耶

    這個時間用debug($this->params['url'])
    會拿到

Array

(
    [url] => products/view
    [color_id] => 36
)
color_id參數正確被識別
------------------------------------------------------------------------------
  但在 

derekypp peng

unread,
Nov 1, 2010, 8:41:31 PM11/1/10
to zf...@googlegroups.com
不好意思,沒有說清楚,真的如凱大所說的

buy是我的 project name
products 是我的controller
view 是我的 function 

用了凱大教的方法
我這樣寫 不知道有沒有寫錯

public function view($a =null , $b = null , $c = null) {
    echo $a;
    echo $b;
    echo $c;
    exit

但只有在 http://127.0.0.1/buy/products/view/3/4/5
會乖乖的印出  3  4  5  (都有拿到值)

 http://127.0.0.1/buy/products/view/aa:3/bb:4/cc:5

拿到的參數又跑到

Array
(    
    [named] => Array
        (
            [aa] => 3,
            [bb] => 4,         
            [cc] => 5
        )
)

所以凱大的意思因為cake的規則,盡量把參數類寫成 \3\4\5 
接著我又把我的程式修了一遍
發現通通這樣寫也有一點麻煩

如果 \3\4\5 這三個總是有值 就變方便的
可是如果是像 產品的搜尋條件 /pen/red/big                  //找產品的顏色、類別、包裝大小       
 view($a =null , $b = null , $c = null) 會得到 a=pen  b=red  c=big
再做sql查詢很方便

可是當三個參數,有一個非必要時
/pen/big                    // red -- 顏色不查詢 所以拿掉
會得到a=pen  b=big        //b是顏色類 結果拿到包裝大的文字

反而造成寫出更多的判斷程式 ,算第幾個參數,算是不是參數是不是一個一個都對到指定的變數去了@@


Caesar Chi

unread,
Nov 1, 2010, 9:04:12 PM11/1/10
to zf...@googlegroups.com
所以在實際應用上,如果需要帶很多參數基本上還是會使用傳統的方式

來取得參數資料。

在我的經驗當中使用framework router path取得資料,大部分都是為了網址的直覺性。

例如上面的網址,就可以因為參數判斷使用者想要看的頁面是哪一種。

derekypp peng

unread,
Nov 11, 2010, 9:06:31 PM11/11/10
to zf...@googlegroups.com
後來在網上找到一篇建立Search結果又可以在分頁有效的文章

他的做法就是把
search  FORM 傳的的參數,再用一個action 組合成cake喜歡的格式
就是 color_id=36&a=1&b=2&c=3 ---> color_id:36/a:1/b:2/c:3

有種覺得強調不要做重覆事情的cake
在這個地方讓我們多做不太必要的事情/____\

不知道大家還有沒有更簡便的寫法呢

Caesar Chi

unread,
Nov 12, 2010, 1:43:23 AM11/12/10
to zf...@googlegroups.com
cakephp我不太清楚

不過ci裡面是有pagination
一般來說framework好像都會有這樣子的東西
畢竟分頁還蠻常用到的功能,每個人都自己寫一套還蠻浪費時間的。
Reply all
Reply to author
Forward
0 new messages