嘿!这里是Total CakePHP新手。
在底部更新/
这是一个两面性的问题。在用于添加user
对象的视图中,我希望在表单中使用下拉(选择)字段。
每个user
都属于一个group
,所以当我添加一个用户时,我想要一个包含该用户可能加入的所有组的下拉列表。目前,group_id
字段是一个文本字段。我知道如何强制它成为选择字段,但我不知道如何以编程方式使用组的名称填充选择。
当前的方法是:
echo $form->input('group_id', array(
'1' => 'NameOfGroup1',
'2' => 'NameOfGroup2',
'3' => 'NameOfGroup3')
);
不过,我希望以编程方式生成选项数组。
echo $form->input('group_id', $this->Group->find('list'));
但这不起作用。我得到一个错误:
Undefined property: View::$Group [APP/views/users/add.ctp, line 8]
对我来说,这意味着我没有从user视图内部访问Group
对象的权限。
我如何才能做到这一点呢?同样,我想通过编程来实现,这样它就会随着我添加或删除组而更新。
编辑:为什么这个不起作用?
// In views/users/someaction.ctp
echo $form->input('group_id',
array('options' => $this->formOptionsGroups)
);
// In controllers/users_controller.php
function someaction() {
// Any other logic
$this->set('formOptionsGroups', $this->Group->find('list'));
}
错误是Group是一个未定义的对象。
发布于 2010-04-08 11:32:31
我认为没有必要在你的situation.Because中使用requestAction
函数,你可以很容易地在你的用户控制器中获得分组列表,然后将它分配给你的用户-在你需要it.That的地方添加页面会更优雅。
顺便说一句,about requestAction来自食谱:requestAction最好与(缓存的)元素结合使用--作为一种在呈现之前获取元素数据的方法。
例如
/*code In the your user-add action of the users controller*/
function useradd()
{
......
//your ownstuff skipped
$grouplist = $this->User->Group->find('list');
$this->set("grouplist",$grouplist);
}
然后在您的useradd操作视图中:
echo $form->input('group_id', $grouplist);
发布于 2010-04-08 10:39:18
问题出在我在控制器中请求动作的方式。
正确的实现是:
echo $form->input('group_id',
array('options' => $this->requestAction(array('controller' => 'groups', 'action' => 'formSelectOptions')))
);
然后在groups控制器中:
// formSelectOptions() returns array for use with a form $options['options']
function formSelectOptions() {
return $this->Group->find('list');
}
https://stackoverflow.com/questions/2597108
复制相似问题