Как отображать label и description для каждого элемента формы, формы, филдсета, предварительно взяв их из БД?

Задача: отображать label и description для каждого элемента формы, формы, филдсета, предварительно взяв их из БД. То есть не как обычно через
$element->setOptions(array(
'label' => 'Какой хороший лейбл',
));

А именно предварительно стащив их из базы, при этом не нарушая общих принципов MVC и ZF2. Более того, ключи элементов в базе должны быть = полному имени элемента на форма (так, как они уходят POST-запросом). Сначала решение кажется очевидным - переопределить методы prepare() и prepareElement, однако, сразу сталкиваюсь с проблемой в коллекциях, так как элементы там создаются иначе и нет доступа к полному имени. Может кто-то уже такое делал? Прошу советов мудрых.
  • Вопрос задан
  • 2874 просмотра
Решения вопроса 1
hlogeon
@hlogeon Автор вопроса
Просмотрел весь код классов Zend\Form\Element, Fieldset, Form,
Таки нашел решение. В методах prepare() и prepareElement(), которые, кстати,вызываются рекурсивно для всех потомков(то есть мы всегда знаем имя "родителя", что в данном случае играет решающую роль). Добавил туда метод, который по id элемента(которое состоит из полного имени на форме) достает нужное описание и лейбел. Это то, что касается того, что было раньше. Сама проблема крылась в том, что в Коллекции, члены этой самой коллекции создаются с помощью фабрики. Zend\Form\Factory. То есть моя ошибка и проблема оказалась очень простой, нужно было помимо самих базовых форм и филдсетов переопределить еще и фабрику их создающую. Не один час ломал голову в чем же беда, а все оказалось очень просто)
Отдельное спасибо @cawakharkov за помощь =)
Надеюсь, кому-то еще когда-нибудь пригодится.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
cawakharkov
@cawakharkov
мне кажется проще всего будет написать свой вьюхелпер
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
31 окт. 2020, в 14:17
1000 руб./в час
31 окт. 2020, в 14:00
1000 руб./в час
31 окт. 2020, в 13:31
60000 руб./за проект