尝试在我的某个表单中向我的buildForm
方法传递选项时出现以下错误。
选项“numOfHoles”不存在。定义的选项包括:“action”,“allow_extra_fields”,“attr”,“auto_initialize”,“block_name”,“by_reference”,“cascade_validation” ,“compound”,“constraints”,“csrf_field_name”,“csrf_message”,“csrf_protection”,“csrf_provider”,“csrf_token_id”,“csrf_token_manager”,“data”,“data_class”,“disabled”,“empty_data”,“ error_bubbling“,”error_mapping“,”extra_fields_message“,”inherit_data“,”intent“,”invalid_message“,”invalid_message_parameters“,”label“,”label_attr“,”label_format“,”mapped“,”max_length“,”method“ ,“pattern”,“post_max_size_message”,“property_path”,“read_only”,“required”,“translation_domain”,“trim”,“validation_groups”,“virtual”。
在我的控制器中:
// hardcoded here for brevity in this example
$form = $this->createForm('crmpicco_course_row', $courseRow, array('numOfHoles' => 18));
在crmpicco_course_row
表格类:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', 'text')
->add('course', 'crmpicco_course', array('numOfHoles' => $options['numOfHoles']))
;
}
在crmpicco_course
表格类:
public function buildForm(FormBuilderInterface $builder, array $options)
{
for ($i = 0; $i < $options['numOfHoles']; $i++) {
$builder->add($i, 'text', array('required' => 'false'));
}
}
/**
* @return string name
*/
public function getName()
{
return 'crmpicco_course';
}
任何人都可以看到为什么选项numOfHoles
没有通过?
答案 0 :(得分:22)
正如您所发现的,每种表单类型都有一个预定义的选项列表。添加新选项需要稍作调整。实际方法在Symfony开发过程中发生了变化,因此您可能会遇到一些较旧的折旧解决方案。
所以基本上添加
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Whatever',
'numOfHoles' => 0,
));
对于您的表单类型,您应该很高兴。
答案 1 :(得分:0)
我在视频中看到,您需要为“发明”选项创建表单类型扩展名:
https://symfonycasts.com/screencast/symfony-forms/form-type-extension#play
“事实证明,您不能只是“发明”新选项并传递它们:每个字段都有一组具体的有效选项。但是,在TextareaSizeExtension中,我们可以发明新选项。”
例如,当需要添加行属性时,可以扩展为:
public function buildView(FormView $view, FormInterface $form, array $options)
{
$view->vars['attr']['rows'] = $options['rows'];
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'rows' => 10
]);
}
现在在buildForm方法中,当您添加字段时,可以通过以下方式传递选项:
->add('content', null, ['rows' => 15])
这至少应该与视频中提到的symfony 4一起使用,可能也为3.4。
刚刚观看了另一个视频https://symfonycasts.com/screencast/symfony-forms/form-options-data,并看到了与塞拉德回答的一样。因此,据我所知,仅当我们要扩展第三方表单类型时,才需要formExtention。
答案 2 :(得分:-1)
尝试这样做:
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
getWindow().setStatusBarColor(Color.TRANSPARENT);
然后:
$numOfHoles = array('numOfHoles' => $options['numOfHoles']));
然后你需要在buildForm之前调用它:
$oForm = $this->createForm(new CompanyForm($numOfHoles));