1

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

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

我的表单页面中有这段代码,但我现在需要将它移动到我的模型中。

4

1 回答 1

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 原则和 mvc 模式:模型和表单之间应该连接什么样的层? 虽然没有太多的解决方案

于 2010-06-09T20:14:32.637 回答