2012-02-03 3 views
0

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

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 ... 

Я ничего, что это не возможно, не читать. Благодарим вас за помощь.

ответ

3

В способе 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

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

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

Так что, если вы используете 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')); 
}