【问题标题】:CakePHP: Use value from dropdown to populate a viewCakePHP:使用下拉列表中的值填充视图
【发布时间】:2016-01-28 20:53:03
【问题描述】:

这是我觉得应该比我做的更容易的事情之一。我有一个下拉列表,其中填充了表中的值。我希望用户选择一个列表项,并让该列表项成为在后续视图中返回一组行的 ID。这是我认为的下拉代码:

    echo $this->Form->input('mission_id', array('label' => 'Mission ID'));
    echo $this->Html->link(__('View'), array('action' => 'index'));

这是一个简单的浏览控制器,它当前返回表格中的所有内容:

public function browse() {
    $this->set('requirements', $this->Paginator->paginate('Requirement'));
}

我不知道如何让控制器接收用户选择的值,以便它可以过滤下一个视图。单击“查看”时,应返回大约 500 行包含所选 ID 的行。我只是不知道在 'action' => 'index' 后面放什么以将其转移到浏览控制器。

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    您需要将input 包装在一个提交给index 操作的表单中,并用提交按钮替换链接:-

    echo $this->Form->create(null, ['action' => 'index']);
    echo $this->Form->input('mission_id', array('label' => 'Mission ID'));
    echo $this->Form->submit(__('View'));
    echo $this->Form->end();
    

    然后在您的index 操作中使用$this->request->data 检查mission_id 并从那里做任何您需要做的事情:-

    public function index() {
        if (!empty($this->request->data['ModelName']['mission_id'])) {
            // do something with submitted mission_id value
        }
    }
    

    如果您确实必须使用链接来提交表单,那么您需要考虑使用 JavaScript 来使链接提交父表单。但最好使用按钮。

    【讨论】:

    • 谢谢。看起来控制器正在从下拉列表中获取一个值,但它是表中的自动增量列,而不是用户选择的实际值。当我回显它时,我得到“2”而不是“OA-7”,这是我过滤结果集所需要的。 OA-7 是表中的条目#2。什么给了?
    • @Chris 你如何填充mission_id 的选项?表单应该将选定的选项value 传递给控制器​​,而不是用户可见的文本。如果这些值不是您想要的,您可能需要更改用于填充下拉列表的数据。
    • 这可能是我出错的地方。该表只有两个字段,id 和mission_id。 Mission_id 是用户看到的,这就是我需要将其转移到我的视图中。我应该把使选择的值变成可见文本的逻辑放在哪里?
    • 想通了。因此只需要修改我的控制器: find('list'), array('fields' => array('mission_id', 'mission_id')));第二个“mission_id”不见了。非常感谢上述!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多