2012-07-17 2 views
0

Сегодня я начал читать себя в функциях 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 в идентификатор сопоставленного объекта? Хотя, возможно, способ, которым я создал свою модель продукта, в этом случае не так.

Любая помощь будет принята с благодарностью :)

+0

Любое обновление о том, как вы получили эту работу с гидраторами ZF2? Я реализую хак, который вручную создает массив из Entity и устанавливает его с помощью 'setValueOptions'. Как вы связываете связанный объект с раскрывающимся списком выбора? Например: пользователь может иметь несколько клиентов (ManyToMany), поэтому, когда я редактирую пользователя, мне нужно вывести имена клиентов из '