symfony2自定义表单类型 - 拥有defaultOptions

时间:2012-02-03 14:28:27

标签: symfony

我在symfony2中创建了自己的表单类型,但我无法在buildView函数中访问自己的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 ...

我没有读到任何不可能的内容。 谢谢你的帮助。

2 个答案:

答案 0 :(得分: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'));
}

这应该可以解决问题。 希望这会有所帮助。

的问候,
马特

答案 1 :(得分:0)

@Matt的答案很棒但是对于使用Symfony 2.1 +的人来说只是一个通知:

为buildView添加了第三个参数(https://github.com/symfony/symfony/blob/master/UPGRADE-2.1.md),称为array $ 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'));
}