CakePHP 3.x 视图 URL 的下拉菜单

Posted

技术标签:

【中文标题】CakePHP 3.x 视图 URL 的下拉菜单【英文标题】:Drop down menu for CakePHP 3.x of URLs to views 【发布时间】:2015-11-21 04:13:30 【问题描述】:

我有一个名为 a_forms 的表,我正在尝试在 AForms 页面上创建一个下拉菜单,其中包含 a_forms 的所有行的列表。我希望下拉列表中的每个选项都直接链接到该表单的视图。这是我的表格:

fid int(3) 无符号自动增量(主键)

标题 varchar(100)

在更新时创建时间戳 CURRENT_TIMESTAMP

修改时间戳

我能够尽可能多地填充下拉菜单,但是我在第二部分遇到问题 - 将每个选项与所选视图相关联。我是 Cakephp 的初学者,所以我可能遗漏了一些东西。这是AFormsController中的函数:

public function forms($id = null)

    $query = $this->AssessmentForms->find('all');
    $result = $query->toArray();
    $assessmentForm = $this->AssessmentForms->get($id, [ 'contain' => [] ]);
    $this->set('assessmentForm', $assessmentForm);
    $this->set('_serialize', ['assessmentForm']);
    $data = $this->AssessmentForms->find('list', array('fields' => array('fid', 'title')));
    $this->set('forms', $data);

forms.ctp:

<?php $this->Form->input('aform.select one', ['type' => 'select', 'options' => $forms, 'empty' => 'Choose One', 'onchange' => 'this.form.submit();']);?>

这给了我“在主键 [NULL] 的表“a_forms”中找不到记录”

我也试过了:

<?php $this->Form->create('Forms', array( 'url' => ['controller'=>'a_forms', 'action'=>'view', $aForm->fid])); ?>

并将其添加到控制器中:

$aForms = $this->AForms->find('list');

它不会引发错误,但我在视图中得到“未定义变量:aForms [APP/Template/AForms/forms.ctp,第 10 行”

我看到其他人正在努力使用“onchange”方法,所以我不确定这是否是正确的方法。我使用的是 3.1.0 版。如果您需要更多信息,请告诉我!

【问题讨论】:

【参考方案1】:

仍然不太清楚如何使用 find() 适当地创建查询,但我找到了一种解决方法:

  <ul class="dropdown-menu">
      <?php foreach ($aForms as $aForm): ?>
          <li> <?= $this->html->link($aForm->title, ['action' => 'fill', $aForm->fid]) ?></li>
      <?php endforeach; ?>
  </ul>

这在控制器中:

$this->set('assessmentForms', $this->paginate($this->AssessmentForms));
$this->set('_serialize', ['assessmentForms']);

我直接从烘焙生成的 index() 函数中提取了它。如果有人有更符合语法的非hackish方式来解决这个问题,请告诉我!

【讨论】:

以上是关于CakePHP 3.x 视图 URL 的下拉菜单的主要内容,如果未能解决你的问题,请参考以下文章

布局中的 CakePHP 动态菜单内容

如何在 CakePHP 的下拉菜单中找到('list')HABTM 相关记录?

保存倍数 Cakephp 3.x

cakephp:从下拉列表中为报告添加过滤器

如何在不加载视图的情况下重新加载/刷新部分视图中的级联下拉列表

Bootstrap 导航栏,新的下拉菜单不会关闭移动视图中已打开的下拉菜单