所以我对Symfony很新,我试图让控制器基于控制器动作构建略有不同的形式.现在,我有这个
//in Controller
public function addLocationEntryAction(Request $request)
{
$entry = new Entry();
$form = $this->get('form.factory')->create(new EntryType('addLocation'), $entry);
return $this->render('OOTNBlogBundle:Blog:addEntry.html.twig', array(
'form' => $form->createView()
));
}
public function addArticleEntryAction(Request $request)
{
$entry = new Entry();
$form = $this->get('form.factory')->create(new EntryType('addArticle'), $entry);
return $this->render('OOTNBlogBundle:Blog:addEntry.html.twig', array(
'form' => $form->createView()
));
}
Run Code Online (Sandbox Code Playgroud)
和
//in EntryType
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('title', 'text')
->add('continent', 'text', array('required' => false))
->add('country', 'text', array('required' => false))
->add('category', 'text', array('required' => false))
->add('author', 'hidden')
->add('type', 'hidden')
->add('text', 'textarea')
->add('post', 'submit')
;
}
Run Code Online (Sandbox Code Playgroud)
我想从控制器传递一个选项buildForm,这样我就可以这样做:
public function buildForm(FormBuilderInterface $builder, array $options, $option)
{
$builder
->add('title', 'text')
;
if($option == 'addLocation')
{
$builder
->add('continent', 'text', array('required' => false))
->add('country', 'text', array('required' => false))
;
}
elseif($option == 'addArticle')
{
$builder
->add('category', 'text', array('required' => false))
;
}
$builder
->add('author', 'hidden')
->add('type', 'hidden')
->add('text', 'textarea')
->add('post', 'submit')
;
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?我在这里检查了Symfony doc和类似的问题,但似乎没有什么比我的情况更合适.我不知道.
b.b*_*4rd 17
无需创建其他参数,只需用于options传递自定义数据.在以下示例中,我将age属性设为必需,您可以将其设为可选或指定默认值.了解更多关于OptionsResolver 这里
class ExampleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
var_dump($options['age']);
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setRequired(array(
'age'
));
}
}
Run Code Online (Sandbox Code Playgroud)
创建:
$form = $this->get('form.factory')->create(new ExampleType(), $entry, array(
'age' => 13
));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12865 次 |
| 最近记录: |