【问题标题】:How to iterate through object array with form helpes in cakephp?如何在cakephp中使用表单帮助遍历对象数组?
【发布时间】:2013-08-15 17:40:17
【问题描述】:

我有一个带有 pageName 属性的 CuratedPage 对象。

我正在控制器中创建一个 CuratedPage 对象数组并将其设置为如下视图:

$this->set('curatedPages', $curatedPages);

在视图中,我正在创建一个这样的页面名称下拉列表:

$pageNames = array();
foreach($curatedPages as $curatedPage) {
    array_push($pageNames, $curatedPage->getPageName());
}
echo $this->Form->input('curatedPage', array('options' => $pageNames));

cakephp 中有没有一种方法可以让我将 CuratedPage 对象数组传递给 Form->input(...) 而不是创建标量值数组。

【问题讨论】:

  • 我不这么认为.. 但是您可以将该数组创建代码移动到您的控制器中,而不是将其放在视图中。

标签: cakephp formhelper


【解决方案1】:

我不确定在这种情况下您希望表单助手做什么。但是,根据您的 PHP 版本(需要 >= 5.2.0),神奇的 __toString() 方法可能会做到这一点。如果您实现它以返回页面名称,那么您最终会得到与您发布的 sn-p 相同的结果,即以页面名称作为标签的数字索引(值属性)HTML 选项列表。

但是,在此特定视图中仅为此目的实现此功能对我来说似乎是错误的,您可能最好使用自定义帮助程序,或者像 @BrianGlaz 建议的那样在控制器中准备数据。

【讨论】:

  • 嗨,我正在尝试实现这样的目标: 这个代码 sn-p 来自 groovy。
  • 好吧,CakePHP 不是 Grails,PHP 也不是 Groovy(没有双关语 :)),FormHelper 不是这样工作的,如前所述,实现 __toString() 将给出您的结果与您的 PHP sn-p 相同。然而,这个特定的 Grails 标记将,AFAIU,将 CuratedPage.toString() 的结果用于 option 元素 value 属性,将 CuratedPage.slug 的值用于 option 元素主体,这与 @ 987654331@ 工作。同样,使用准备 options 数组的助手,或者准备控制器可能是你最好的选择。
猜你喜欢
  • 2011-09-26
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
相关资源
最近更新 更多