【发布时间】:2016-02-05 02:10:57
【问题描述】:
我有一个应用程序,它从下拉列表中获取一个值并使用它来过滤索引视图。这是控制器代码:
public function browse() {
$this->loadModel('ReqMissionId');
$missions = $this->ReqMissionId->find('list', array('fields' => array('mission_id', 'mission_id')));
$this->set(compact('missions'));
}
这是索引的控制器代码:
public function index() {
if($this->request->is('post')) {
$options = array('Requirement.mission_id' => $this->request->data['Requirement']['mission_id']);
$this->set('mission_id', $this->request->data['Requirement']['mission_id']); //Used to display the mission_id on the index page.
$this->Paginator->settings = $this->paginate;
$this->set('requirements', $this->Paginator->paginate('Requirement', $options));
}
}
View 中的下拉菜单很简单:
<?php
echo $this->Form->input('mission_id', array('label' => 'Mission ID'));
echo $this->Form->submit(__('View'));
echo $this->Form->end();
?>
我的问题是分页。由于 Cake 在对列进行排序时会进行回发,因此“Requirement.mission_id”的值会丢失,并且我会收到“调用成员函数 sort() on null”错误。我觉得我可以用会话变量来处理这个问题,但我不清楚实现。这是正确的,还是我应该做其他事情?
【问题讨论】:
-
为什么不将它作为传递参数包含在 URL 中?例如。
/controller/index/[mission_id]和public function index($mission_id) -
这看起来很优雅。如果从下拉列表中拉出,我将如何将任务 ID 附加到 URL?
-
通过在表单中使用方法 GET,您会得到一个查询字符串,它可能无法很好地与分页配合使用(您必须设置
$this->paginate = array( 'paramType' => 'querystring');才能使其工作。Javascript 可以帮助您创建正确的命名参数下拉列表中的 URL。但是,您真正需要的是 CakeDC/search。您可以在分页时按任何字段进行过滤。
标签: php cakephp pagination