Время от времени большой объект приходится редактировать с помощью нескольких небольших форм. Стандартными средствами форм Symfony приходится вместо указания нужных полей исключать в настройках формы ненужные методом unset['fieldname]
. При добавлении новых полей в базу такой подход заставит нас править все относящиеся к измененным таблицам формы, что, при большом количестве форм, весьма неудобно и потенциально грозит сломанными формами на сайте.
Решение этой проблемы достаточно простое - добавить функциональность для указания в методе конфигурации формы именно тех полей, которые должны быть в нашей форме. Я приведу пример для Propel.
Добавляем в lib/form/BaseFormPropel.class.php новый метод:
public function unsetAllExcept($fields = array()) { $tmp = array(); foreach ($this->getObject()->toArray( BasePeer::TYPE_FIELDNAME ) as $key => $val) { $tmp[] = strtolower($key); } $tmp = array_diff($tmp, $fields); foreach ($tmp as $value) { unset($this[$value]); } }
Далее в классе нашей формы в методе configure пишем:
$this->unsetAllExcept(array('field1', 'field2', 'fieldN'));