Заполнение выбора из базы данных с использованием Zend_Form - PullRequest
1 голос
/ 20 декабря 2008

Каков наилучший способ заполнить элемент select, являющийся частью Zend_Form?

Я использовал populate() для заполнения различных значений элементов формы, но операторы выбора не заполняются.

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

В методе init() MyForm (который расширяет Zend_Form) я выполняю вызов базы данных и получаю необходимые данные.

$opt = Zend_Registry::get('dbAdapter');
$sql = 'SELECT DISTINCT foo FROM bar';
$res = $opt->fetchAll($sql);
$flat = $this->flattenArray($res); //this flattens the array and 
                                   //sets the keys to equal the values

В этот момент я передаю $flat значению multi-options правильного элемента select. Затем, когда контроллер получает форму для представления, если форму необходимо заполнить, я вызываю ее заполнить, и все выглядит правильно заполненным.

Некоторые проблемы, которые я вижу: во-первых, у меня есть этот вызов базы данных в методе init() формы, поэтому он вызывается при каждом использовании формы. Во-вторых, у меня открыто соединение с базой данных, чтобы заполнить элемент select, затем я делаю второе соединение, чтобы использовать заполнение.

Какой лучший способ сделать все это? Я хотел бы сделать одно соединение с базой данных и использовать заполнение, чтобы заполнить все и сделать все это из моего контроллера, а не разделять его между расширенным классом формы и контроллером. Это лучший подход? Это мое решение на заказ, и оно работает, но я ЗНАЮ, что оно далеко от идеала

(Кстати, как кто-то, кто работает один и в изолированном месте, может задавать stackoverflow такой вопрос, как если бы я собирал коллегу, чтобы задать вопрос, для меня это очень полезно ... спасибо) 1022 *

1 Ответ

1 голос
/ 20 декабря 2008

Я не на 100% уверен, что вы ищете. Я понимаю, что вызов SQL в вашем примере выполняется несколько раз для одного просмотра страницы, и вам это не нравится?

Вы можете кэшировать выбранное содержимое для

  • просмотр страницы со статической переменной в функции init или в классе.
  • пользователь как переменная сеанса.
  • всех пользователей в файл или memcache с Zend_Cache, в зависимости от того, насколько динамически он генерируется.
...