代码之家  ›  专栏  ›  技术社区  ›  meder omuraliev

用动态数据生成Zend表单?

  •  1
  • meder omuraliev  · 技术社区  · 14 年前

    我需要访问我的会话,并且基于会话属性,我需要从数据库中获取一些东西以用作下拉列表中的选项。

    $会话是:

    [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,因为在以下情况下,我的酒店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 回复  |  直到 14 年前
        1
  •  1
  •   Community CDub    7 年前

    那么你的问题在哪里呢?

    对数据库进行适当的查询以获取这些帐户。

    根据结果生成适当的数组。(id=>标题)

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

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

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


    model,位于application/modules/foo/models/dbtable/social中,model类名为model\dbtable\u social,模块为foo。引发致命错误:

    您的DB表类可能应命名为:

    Foo_Model_DbTable_Social
    

    和application.ini应包含:

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

    当我试图以我的形式调用它时,类“model-dbtable-social”。还是你说的更简单?

    像切尔默茨所说,在建筑中寻求这些资源是一个很好的做法。以下是有关主题的精彩演讲: http://www.youtube.com/watch?v=-FRm3VPhseI

    您可能想阅读我关于“将表单连接到模型的位置”的问题: zend-framework doctrine, and mvc pattern: what kind of layer should connect data between models and forms? 但解决方案不多

    推荐文章