2014-01-10 129 views
5

在CakePHP 3.0命名參數已被刪除(感謝上帝)有利於標準的查詢字符串參數在線與其他應用程序框架。CakePHP的3.0查詢字符串參數VS傳遞的參數

什麼我仍然在努力讓我的頭周圍雖然是在其他的MVC框架,例如ASP.NET,你會傳入的ActionResult參數(相同的功能):

Edit(int id = null) { 

    // do stuff with id 

} 

而且該方法會被傳入ID作爲查詢字符串,如:/Edit?id=1,你會使用路由讓它非常喜歡:/Edit/1

在CakePHP函數的參數裏面方式通不過任何事情:/Edit/1繞過查詢字符串理念,還需要對路由改善網址:

function edit($id = null) { 

    // do stuff with $id 

} 

必須像一個傳遞的參數來完成。

如果我的名字在鏈接的PARAMS對於編輯,如:

$this->Html->link('Edit', array('action' => 'edit', 'id' => $post->id)); 

然後我要做的:

public function edit() { 

    $id = $this->request->query('id'); 

    // do stuff with $id 

} 

要獲取傳遞的參數ID。會想到它會撿起來,在功能上類似於ASP.NET的CakePHP的3.0,但事實並非如此。

我寧願前綴的編輯鏈接傳遞的值,而不是隻是路過他們,所以我沒有給儘可能多的擔心序的另一端,我知道他們是什麼等

有任何人都玩過的任何數據傳遞到他們在CakePHP的方法,可以揭示做事的正確方法更加輕便的這些方式如何變化在3.0版本將提高這方面的事情......

回答

10

有一個CakePHP 3.0中的請求參數類型很少。讓我們回顧一下他們:

查詢字符串:與$this->request->query()被訪問時,不傳遞給控制器​​的功能作爲參數,併爲了讓你需要做的Html->link('My link', ['my_query_param' => $value])

傳遞的參數鏈接:特殊參數類型是由控制器函數作爲參數接收的參數類型。他們訪問無論是作爲參數,或者通過檢查$this->request->params['pass']。您建立與不同的路線上傳遞ARGS鏈接,但該缺省路由你只需要添加位置PARAMS到鏈接像Html->link('My link', ['action' => view, $id, $secondPassedArg, $thirdPassedArg])

請求參數:傳遞的參數,這是一個的子類型。請求參數是可以住在請求出,可以從路徑中提取的信息的值。在他們的一生中,Params可以轉換爲其他類型的params。

考慮這條路線:

Router::connect('/articles/:year/:month/:day', [ 
    'controller' => 'articles', 'action' => 'archive' 
]); 

我們已經有效地創造了這條路線3個請求參數:yearmonthday,他們可以用$this->request->year$this->request->month$this->request->day進行訪問。爲了建立一個鏈接,這個我們做的:

$this->Html->link(
    'My Link', 
    ['action' => 'archive', 'year' => $y, 'month' => $m, 'day' => $d] 
); 

注意,作爲路由指定這些參數,它們不會轉換爲查詢字符串PARAMS。現在,如果我們想對那些轉換爲傳遞的參數,我們連這條路改爲:

Router::connect('/articles/:year/:month/:day', 
    ['controller' => 'articles', 'action' => 'archive'], 
    ['pass' => ['year', 'month', 'day']] 
); 

我們的控制器功能會是這個樣子:

function archive($year, $month, $day) { 
    ... 
} 
+0

爲什麼CakePHP的讓你的類型,因爲它之間的選擇在ASP.NET中看起來比我看到的更乾淨,因爲直到您使用路由器使其成爲漂亮的版本(您在CakePHP中通過傳遞的參數默認看到)之前,默認查詢字符串。感謝Jose的信息,非常感謝。 – Cameron

相關問題