2010-04-08 25 views
0

嘿!這裏總的CakePHP noob。

更新於底部/

這是一種雙重問題。在用於添加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] 

對我來說,這意味着我沒有從我的用戶視圖裏訪問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')); 
} 

錯誤在於該組是一個未定義的對象。

+0

相關教程:http://book.cakephp.org/view/335/Create-a -Posts-Controller和http://book.cakephp.org/view/336/Creating-Post-Views – deceze 2010-04-08 03:45:19

回答

3

我認爲這是沒有必要使用requestAction功能在你的situation.Because你可以得到GROUPLIST在您的用戶控制器中,然後輕鬆地將其分配到您需要的用戶添加頁面。這將更加優雅。

順便說一句,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); 
+0

你能提供示例代碼嗎?我沒有完全遵循。謝謝! – Jay 2010-04-08 19:07:19

+0

@ James,查看更新... – Young 2010-04-09 00:34:50

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'); 
} 
+0

幹得好。感謝您發佈答案。 – webbiedave 2010-04-08 03:13:42

+2

反過來,在控制器中找到數據,然後'set()'使其在視圖中可用。 'requestAction'有相當多的開銷。 – deceze 2010-04-08 03:39:59