CakePHP形式$ options ['options']

时间:2010-04-08 02:07:21

标签: php oop forms cakephp

喂!在这里总CakePHP noob。

在底部/

更新

这是一个双重问题。在用于添加user个对象的视图中,我想在表单中使用下拉(选择)字段。

每个user属于group所以当我添加用户时,我想要一个下拉列表,其中包含用户可能加入的所有组。目前,group_id字段是文本字段。我知道如何强制它成为一个选择字段,但我不知道如何用编程方式用组的名称填充选择。

当前方法:

echo $form->input('group_id', array(
    '1' => 'NameOfGroup1',
    '2' => 'NameOfGroup2',
    '3' => 'NameOfGroup3')
    );

我想以编程方式生成options数组。

echo $form->input('group_id', $this->Group->find('list'));

但这不起作用。我收到一个错误:

Undefined property: View::$Group [APP/views/users/add.ctp, line 8]

对我而言,这意味着我无法从用户视图中访问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是未定义的对象。

2 个答案:

答案 0 :(得分:3)

我认为没有必要在您的情况下使用requestAction功能。因为您可以轻松地在用户控制器中获取组列表,然后将其分配到您需要的用户添加页面。这样会更多优美。

来自cookbook的BTW,about requestAction requestAction最好与(缓存)元素一起使用 - 作为在渲染之前获取元素数据的一种方法。

<强> E.g

/*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);

答案 1 :(得分:0)

问题在于我是如何在控制器中请求操作的。

正确的实施是:

echo $form->input('group_id', 
                  array('options' => $this->requestAction(array('controller' => 'groups', 'action' => 'formSelectOptions')))
                  );

然后在群组控制器中:

// formSelectOptions() returns array for use with a form $options['options']
function formSelectOptions() {
    return $this->Group->find('list');
}