2010-05-27 36 views
1

比方說,我有:如何從cakephp中的URL中獲取參數到模型?

http://some-domain/application/controller/action/parameter 

這在某種程度上是CakePHP的工作。現在我想知道'參數'究竟是什麼。但在模型中。如何獲得這些信息?

我必須說有一個包含'Next'按鈕的公式,我想驗證beforeValidate()中的模型輸入。但是我必須知道用戶在點擊提交按鈕時在哪個頁面上。這個頁面是'參數'。

回答

3

有兩種類型的參數在CakePHP中,你已經通過參數和命名參數。傳遞的參數如您的示例中所示,並將作爲url的一部分傳遞。

http://example.com/controller/action/passed_param 
echo $this->params['passed'][0] // 'passed_param' 

http://example.com/controller/action/name:param 
echo $this->params['named']['name'] // 'param' 

我建議在控制器中獲取參數並調用與它們通過的模型方法。

$this->Model->find('all', array('conditions'=>array('id'=>$this->params['passed'][0]))); 

至於它是如何工作的,你會想看看你的路由文件。在您的app/config/routes.php,你會發現所有的路由和部分傳遞。

標準的蛋糕URL格式通常如下,因爲你會在路線見。 array('controller'=>'MyController', 'action'=>'MyAction', 'MyParam');

我似乎無法在關於Params的書中找到特定的頁面,但有一個谷歌周圍的指南。

+0

在蛋糕1.2.6,傳遞的參數是'$這個 - > PARAMS [ '通']'。 – joshuarh 2013-09-11 16:28:58

+0

爲什麼'找到( '所有')',而不是'找到( '第一')'?希望在搜索ID時只有一個匹配項。 – Blazemonger 2013-09-12 17:57:59

2

模型(MVC設計模式),不應該有任何外部變量的直接訪問。正確的方法是將變量傳遞從控制器或參數查看:

$myModelObj->doSth($getParameter); 
+0

這就是實際內部發生我猜:-) – Andre 2010-05-27 13:01:31

4

Router::getParams()可從任何地方,並給出

[plugin] => 
    [controller] => leads 
    [action] => step1 
    [named] => Array() 
    [pass] => Array() 
    [url] => Array(
      [ext] => html 
      [url] => someurl/post-1 
    ) 

http://api.cakephp.org/2.3/class-Router.html#_getParams

+1

它無處不在。在嘗試使用routes.php文件是這樣,就像我們平時路由後運行的代碼的東西被解析爲模型,控制器和視圖 – kicaj 2013-01-23 17:09:56

+0

好抓, 我以前不另行通知,謝謝 – ptica 2013-01-24 08:56:28

+0

這是爲我工作... – 2014-05-28 08:12:15