2010-05-27 128 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