我在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 ...
我没有读到任何不可能的内容。 谢谢你的帮助。
答案 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'));
}