Пользовательский тип формы symfony2 - собственный defaultOptions - PullRequest
0 голосов
/ 03 февраля 2012

Я создаю собственный тип формы в symfony2, но я не могу получить доступ к своим собственным defaultOptions в функции buildView.Вот код:

public function getDefaultOptions(array $options)
{        
    return array(
        'identifier' => isset($options['identifier']) ? $options['identifier'] : '#star',
        'currentRating' => isset($options['currentRating']) ? $options['currentRating'] : 0,
    );
}

/**
 * {@inheritdoc}
 */
public function buildView(FormView $view, FormInterface $form)
{                
    $view->set('currentRating', $form->getAttribute('currentRating'));
    $view->set('idientifier', $form->getAttribute('identifier'));
}

Ошибка:

Notice: Undefined index: currentRating in ...

Я ничего не читаю, что это невозможно.Спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 03 февраля 2012

В методе buildForm вашего типа вам нужно явно установить атрибут, который вы хотите использовать в методе buildView. Вот как это сделать:

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

    $builder->setAttribute('currentRating', $options['currentRating']);
    $builder->setAttribute('identifier', $options['identifier']);
} 

public function buildView(FormView $view, FormInterface $form)
{
    $view->set('currentRating', $form->getAttribute('currentRating'));
    $view->set('identifier', $form->getAttribute('identifier'));
}

Это должно сработать. Надеюсь, это поможет.

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

0 голосов
/ 03 декабря 2013

@ Ответ Мэтта великолепен, но просто замечание для всех, кто использует Symfony 2.1 +:

Был добавлен третий аргумент (https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md) для buildView, называемого массивом $ options, что необходимо, поэтому убедитесь, что вы добавили это.

Итак, если вы используете Symfony 2.1+, сделайте следующее:

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

    $builder->setAttribute('currentRating', $options['currentRating']);
    $builder->setAttribute('identifier', $options['identifier']);
} 

public function buildView(FormView $view, FormInterface $form, array $options)
{
    $view->set('currentRating', $form->getAttribute('currentRating'));
    $view->set('identifier', $form->getAttribute('identifier'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...