При использовании функции buildForm-> add () в Symfony2, каковы приемлемые параметры? - PullRequest
4 голосов
/ 21 сентября 2011

Я просмотрел документацию и, если не пропустил ее, я не смог найти ничего, объясняющего, каковы официальные опции $ для функции buildForm-> add () в Symfony2.

public function buildForm(FormBuilder $builder, array $options)
{

    $builder->add('fieldname1');        
    $builder->add('fieldname2', new formObjectType(), $arrayOptions);

}

Принимая код выше, какие параметры будут переданы в виде массива для второго поля.

Спасибо

Ответы [ 2 ]

4 голосов
/ 22 сентября 2011

Эти опции передаются типу поля, в вашем случае formObjectType.Таким образом, это действительно зависит от того, какие опции принимаются в этом поле.Например, скажем, вы хотите передать опцию, чтобы formObjectType показывал или не отображал данное поле.Вы могли бы сделать что-то вроде этого:

// Application/AcmeBundle/Form/Type/FormObjectType.php
class FormObjectType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $this->add('name', 'text');
        if ($options['display_custom_field'] === true) {
            $this->add('name_custom', 'text');
        }

    }

    public function getDefaultOptions(array $options)
    {
        return array(
            'display_custom_field' => false,
        );
    }
}

// Application/AcmeBundle/Controller/FormController.php
class FormController extends Controller 
{
    public function createForm($object)
    {
        return $this->getFormFactory()->create(new FormObjectType(), $object, array(
            'display_custom_field' => true,
        ));
    }

    public function customAction() 
    {
        $form = $this->createForm();

        // Code here ...
    }
}

Если опция в массиве передана или массив не передан вообще, значение по умолчанию, если установлено в formObjectType.Таким образом, этот массив используется для настройки параметров, ожидаемых для данного типа.Это также работает со встроенным типом, таким как text, date и т. Д.

Надеюсь, это поможет.

С уважением,
Matt

PS Вы должныначните свое имя класса с заглавной буквы: FormObjectType вместо formObjectType, чтобы отличать переменные и методы от имен классов.Это всего лишь предложение:)

3 голосов
/ 22 сентября 2011

Этот же вопрос меня тоже беспокоил. Параметры по умолчанию записаны внутри соответствующих классов типов . Давайте возьмем DateType в качестве примера.

DateType::getDefaultOptions() перечисляет все параметры по умолчанию, если вы не определяете их самостоятельно. Кроме того, у нас есть DateType::getAllowedOptionValues() - кажется, он определяет, какие значения действительны для определенных параметров.

Обратите внимание, что все классы расширяются AbstractType, и в дополнение к этому наследованию каждый "тип" реализует FormTypeInterface::getParent(). Для DateType родитель - FieldType. FieldType, очевидно, является родительским классом для большинства полей, и для него также определены несколько параметров по умолчанию. Я предполагаю, что все эти параметры объединяются при вызове определенного типа формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...