5

我知道 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'))

有什么想法吗?

4

3 回答 3

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

于 2012-10-24T09:39:40.790 回答
13

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

例如,如果您使用的是最新的 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

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

if ($this->request->is(post)) {
    //validate and save here
} else {
    $this->request->data['Listing']['vt_tour'] = $id;
}
于 2012-10-24T09:46:25.170 回答
1

或者,您也可以使用所谓的命名参数

$id = $this->params['named']['id'];
于 2012-10-24T09:41:22.223 回答