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