Создание Zend-формы с динамическими данными? - PullRequest
1 голос
/ 09 июня 2010

Мне нужен доступ к моему сеансу, и на основе свойства сеанса мне нужно получить материал из базы данных, чтобы использовать его в качестве параметров в раскрывающемся списке.

$ _ SESSION:

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

Мне нужно выбрать Hotel A из выбранного, а затем получить доступ ко всем аккаунтам в Hotel A из базы данных:

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

Мне нужны идентификаторы 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 Ответ

1 голос
/ 10 июня 2010

Так в чем же ваша проблема?

Сделайте правильный запрос в вашей базе данных, чтобы получить эти учетные записи.

Создайте правильный массив из результата.(id => Title)

Вы можете установить параметры для уже существующего элемента:

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

Вы можете создать метод в своем классе формы, который будет принимать DB obj, Session obj и выполнятьдействия, необходимые для загрузки и установки этих параметров.


модель, которая находится в application / modules / foo / models / DbTable / Social, имя класса модели - Model_DbTable_Social, а модуль - foo.Выдает фатальную ошибку:

Ваш класс таблицы базы данных, вероятно, должен иметь имя:

Foo_Model_DbTable_Social

И application.ini должен содержать:

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

Класс 'Model_DbTable_Social', когда я пытаюсь вызвать его в моей форме.Или этот способ, который вы упоминаете, проще?

Хорошей практикой является запрос ресурсов в __construct, как сказал Челмерц.Вот хороший разговор на эту тему: http://www.youtube.com/watch?v=-FRm3VPhseI

Возможно, вы захотите прочитать мой вопрос на тему "где соединить формы с моделями": доктрина zend-framework и шаблон mvc: какой типслой должен соединять данные между моделями и формами? Не слишком много решений, хотя

...