【问题标题】:CakePHP: Value from $this->request->data being lost on pagination postbackCakePHP:来自 $this->request->data 在分页回发时丢失的值
【发布时间】: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-&gt;paginate = array( 'paramType' =&gt; 'querystring'); 才能使其工作。Javascript 可以帮助您创建正确的命名参数下拉列表中的 URL。但是,您真正需要的是 CakeDC/search。您可以在分页时按任何字段进行过滤。

标签: php cakephp pagination


【解决方案1】:

检查您正在分页的模型的会话。试试这样的:

试试这样的:

if(!empty($this->request->data['Requirement']))
    $this->Session->write('Requirement', $this->request->data['Requirement']);
else
    $this->request->data['Requirement'] = $this->Session->read('Requirement');

把它放到你的 $options 中。尝试像这样使用数组合并:

$options = array_merge($options, $this->getOptions($this->request->data));

在下面实现getOptions:

function getOptions($data = null){
            $options = array();

            if(!empty($data['Requirement']['mission_id']))
                $options = array_merge($options, array('mission_id' => $data['Requirement']['mission_id']));

            return $options;
    }

【讨论】:

    猜你喜欢
    • 2012-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    相关资源
    最近更新 更多