4

我有一个搜索表单,我正在使用 GET 方法提交它。表单提交后,我需要用提交的值预先填写表单。如果是 POST,cake 会自动处理这个问题,但它不适用于 GET。我使用 cakephp 的表单助手创建了表单和表单控件。是否有任何简单的方法来预先填写字段而不是手动设置每个字段?我正在使用 cakephp2.x

4

3 回答 3

6

我知道这个问题是不久前被问到的,但我最近遇到了同样的问题。

当你使用 GET 时,CakeRequest不会填充CakeRequest::data属性。表单助手通常使用此属性来填充输入的值。因此,您必须首先在控制器中的某处用您的 GET 数据填充此属性。例如:

$this->request->data = $this->request->query;

您的下一个问题是,如果您使用 GET,Form Helper 会忽略您为表单设置的模型。不幸的是,这种行为没有记录在案,但确实提到了这一点

您也可以通过false. $model这会将您的表单数据放入数组:($this->request->data而不是子数组:)$this->request->data['Model']。这对于可能不代表数据库中任何内容的简短表单非常方便。

因此,您需要在false创建搜索表单时将模型设置为。例如:

echo $this->Form->create(false, array('type' => 'get'));
于 2013-02-13T04:05:06.037 回答
0

对于 CakePHP 3,您可以像这样简单地创建表单:

echo $this->Form->create($user);

而不是在控制器操作中只需将 $user 设置为实体

$user = $this->Users->get($id);
于 2016-03-31T02:43:44.947 回答
-1

您可以通过在控制器中填充$this->request->data属性来做到这一点。

例如,假设你有这个作为你的表单:

 <?= $this->Form->create('Search'); ?>
 <?= $this->Form->input('query'); ?>
 <?= $this->Form->end(); ?>

然后在您的控制器操作中使用:

 $this->request->data('Search.query', 'search data');
于 2012-11-07T08:06:23.933 回答