使用动态数据生成zend表单?

时间:2010-06-09 19:53:43

标签: php zend-framework zend-form zend-session

我需要访问我的会话并根据会话属性我需要从数据库中获取内容以用作我的下拉列表中的选项。

$ _ 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

我需要ID 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 个答案:

答案 0 :(得分:1)

那么你的问题在哪里?

对您的数据库进行正确查询以获取这些帐户。

从结果中创建一个正确的数组。 (id =>标题)

您可以在现有元素上设置选项:

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

您可以在表单类中创建一个方法,该方法将接受DB obj,Session obj并执行加载和设置这些选项所需的操作。


  

模型,在application / modules / foo / models / DbTable / Social中,模型类名是Model_DbTable_Social,模块是foo。引发致命错误:

您的db-table类可能应该命名为:

Foo_Model_DbTable_Social

application.ini应该包含:

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

当我尝试在表单中调用它时,类'Model_DbTable_Social'。或者你提到的那种方式更容易吗?

如同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? 虽然没有太多解决方案