2010-06-09 30 views
1

我需要訪問我的會話,並根據會話屬性我需要從數據庫中獲取東西作爲我的下拉列表中的選項。用動態數據生成一個zend表單?

$ _SESSION是:

[sess_name] => Array(
    [properties] => Array(
     1=> Hotel A, 
     2=> Hotel B 
    ), 
    [selected] => 1 
) 

我需要抓住酒店A從選中,然後從數據庫中下酒店A訪問的所有帳戶:

id title      hotel_id 
------------------------------ 
1 Hotel A Twitter Account  1 
2 Hotel B Facebook Account 2 
3 Hotel A Facebook Account 1 

我需要IDS 1和3,因爲我的hotel_id在上下文中是1:

$this->addElement( 'select', 'account', array(
    'multioptions' => $NEED_IT_HERE 
)); 

這是我的查詢/會話抓取代碼:

$cs = new Zend_Session_Namespace(SESS_NAME); 
$model = new Model_DbTable_Social; 
$s = " 
    SELECT social_accounts.* 
    FROM social_accounts 
    LEFT JOIN social_media_outlets ON social_media_outlets.id = social_accounts.property 
    WHERE social_accounts.property=".(int)$cs->selectedclient; 

我在表單頁面中有此代碼,但現在需要將其移入我的模型中。

回答

1

那麼你的問題在哪裏?

對您的數據庫進行適當的查詢以獲取這些帳戶。

從結果中創建一個合適的數組。 (ID =>標題)

您可以設置現有的元素選項:

$element = $form->getElement('account'); 
$element->setMultiOption($option_array); 

您可以在表單類中創建一個方法,將接受DB OBJ,會議OBJ並進行加載所需採取的行動並設置這些選項。


model, which is in application/modules/foo/models/DbTable/Social, the model class name is Model_DbTable_Social and the module is foo. Throws Fatal error:

你的數據庫,表類可能應該被命名爲:

Foo_Model_DbTable_Social 

而且應該的application.ini包含:

resources.modules[] = 
; (It is autoloader for modules) 

Class 'Model_DbTable_Social' when I try to invoke it in my form. Or is that way which you mention easier?

這是一個很好的做法,就像chelmertz說的那樣在__construct中尋求那些資源。下面是相關的主題一個很好的談話: http://www.youtube.com/watch?v=-FRm3VPhseI

你可能想讀我的「哪裏的形式連接到款」的問題: zend-framework doctrine, and mvc pattern: what kind of layer should connect data between models and forms? 沒有太多的解決方案,雖然

+0

*,其中*我做的查詢以獲取這些帳戶?在形式本身?如果是這樣,我如何從表單實例中引用查詢調​​用方法?我如何真正配合我一起做的事情? – 2010-06-09 20:17:51

+0

當然,從表單中獲取它,確保聽取建議「你可以在你的表單類中創建一個接受DB obj,Session obj並執行加載和設置這些選項所需的操作的方法。」儘管如此,您可以爲您的值注入不同的來源。我會讓'Form_YourClass :: __ construct()'需要這些選項(例如酒店作爲數組),否則初始化將失敗。 – chelmertz 2010-06-09 20:24:08

+0

我把我的db代碼移植到'application/modules/foo/models/DbTable/Social'模型中,模型類名稱爲Model_DbTable_Social,模塊爲foo。拋出致命錯誤:當我嘗試在窗體中調用類時,出現'Model_DbTable_Social'類。或者你提到的那種方式更容易? – 2010-06-09 20:26:20