使用CakePHP(params)提取URL值

时间:2012-10-24 09:36:07

标签: php mysql url cakephp

我知道CakePHP参数很容易从像这样的URL中提取值:

http://www.example.com/tester/retrieve_test/good/1/accepted/active

我需要从这样的URL中提取值:

http://www.example.com/tester/retrieve_test?status=200&id=1yOhjvRQBgY

我只需要来自此ID的值:

  

ID = 1yOhjvRQBgY

我知道在正常的PHP $ _GET中会很容易地检索这个,但是我不能让它将值插入到我的数据库中,我使用了这段代码:

$html->input('Listing/vt_tour', array('value'=>$_GET["id"], 'type'=>'hidden'))

任何想法的人?

3 个答案:

答案 0 :(得分:15)

使用这种方式

echo $this->params['url']['id'];

它位于cakephp手册http://book.cakephp.org/1.3/en/The-Manual/Developing-with-CakePHP/Controllers.html#the-parameters-attribute-params

答案 1 :(得分:12)

您没有指定正在使用的蛋糕版本。请始终这样做。没有提到它会给你很多错误的答案,因为很多东西在版本中都会发生变化。

如果您使用的是最新的2.3.0,则可以使用新添加的查询方法:

$id = $this->request->query('id'); // clean access using getter method

在您的控制器中。 http://book.cakephp.org/2.0/en/controllers/request-response.html#CakeRequest::query

但旧方法也有效:

$id = $this->request->params->url['id']; // property access
$id = $this->request->params[url]['id']; // array access

你不能使用自

以来的名字
$id = $this->request->params['named']['id'] // WRONG

会要求您的网址为www.example.com/tester/retrieve_test/good/id:012345。 所以havelock的答案是不正确的

然后将您的id传递给表单默认值 - 或者在您提交表单后直接传递给save语句(此处不需要使用隐藏字段)。

$this->request->data['Listing']['vt_tour'] = $id;
//save

如果您确实需要/想要将其传递给表单,请使用$this->request->is(post)的else块:

if ($this->request->is(post)) {
    //validate and save here
} else {
    $this->request->data['Listing']['vt_tour'] = $id;
}

答案 2 :(得分:1)

或者你也可以使用所谓的named parameters

$id = $this->params['named']['id'];