Сегодня я начал читать себя в функциях Zend \ Form. Я нашел great tutorial от Майкла Гальего, в котором он объясняет, как использовать некоторые новые интересные функции.Zend Form в сочетании с отношениями Doctrine 2 и ManyToOne
Пример хорошо работает до сих пор, если мы обрабатываем отношения 1-1. Доктрина прекрасно их охватывает.
Что я хочу сделать, это
- Вместо того, чтобы текстовое поле для соответствующего значения, я хотел бы поле выбора
- поле выбора необходимо иметь действительные параметры, в зависимости от того, что в базе данных
- для редактирования позже, выбранный в данный момент значение должно быть выбрано
- доктрина не должны добавлять новые строки в таблице One-
Как вы можете видеть на my github sources, я использовал пример в учебнике, но сократил его до «Продукт» и «Бренд». Бренды - в моем примере - это DB-таблица с предопределенными брендами (Nike, Adidas, Puma, независимо), и когда вы создаете новый продукт из формы, вы получаете эти Бренды в качестве выбранного меню.
Прямо сейчас, способ добавления параметров не работает. Я знаю, что я могу вручную настроить параметры с массивом как
$form->get('product')->get('brand')->setAttribute('options', array('Nike'=>'1', 'Adidas'=>'2', etc);
Но я сильно предположить, что существует более автоматизированный способ сделать это. Я просто не понимаю все эти классы Hydrator, предоставляемые Zend.
Проблема в том, что если я вручную определяю массив, как описано выше, отображение продукта и бренда работает некорректно. Свалка $product
прямо сейчас выглядит следующим образом
object(Application\Entity\Product)[210]
protected 'id' => null
protected 'name' => string 'asdasd' (length=6)
protected 'price' => string '123123' (length=6)
protected 'brand' =>
object(Application\Entity\Brand)[215]
protected 'id' => null
protected 'name' => string '1' (length=1)
Очевидно, что бренд сопоставлен совершенно неправильно (за то, что я хочу достичь, Зенд, вероятно, видит это как право, так как стоимость моего выбора является 1).
Вопрос Как сообщить моей форме, чтобы отобразить значение select в идентификатор сопоставленного объекта? Хотя, возможно, способ, которым я создал свою модель продукта, в этом случае не так.
Любая помощь будет принята с благодарностью :)
Любое обновление о том, как вы получили эту работу с гидраторами ZF2? Я реализую хак, который вручную создает массив из Entity и устанавливает его с помощью 'setValueOptions'. Как вы связываете связанный объект с раскрывающимся списком выбора? Например: пользователь может иметь несколько клиентов (ManyToMany), поэтому, когда я редактирую пользователя, мне нужно вывести имена клиентов из '
@hohner Просто ознакомьтесь с Документами DoctrineModule (папка docs на github), Bakura написал удивительный readme;) – Sam