脚本宝典收集整理的这篇文章主要介绍了php – Symfony2 – 为自定义表单类型创建模板,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的完整配置:
<?PHP # src/Acme/PhotoBundle/Form/Type/ThumbnailType.PHP namespace OSC\MediaBundle\Form\Type; use OSC\MediaBundle\Manager\VideoFileManager; use Symfony\component\DependencyInjection\Container; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\ChoiceList\ObjectChoiceList; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\FormEvents; use Symfony\Component\OptionsResolver\OptionsResolverInterface; class VideoFileType extends AbstractType { public $container; public $videoPResets = []; public function __construct(Container $container) { $this->container = $container; $videoPresets = $container->getParameter('osc_media.video.presets'); foreach ($videoPresets as $key => $videoPreset) { array_push($this->videoPresets,$key); } } public function builDForm(FormBuilderInterface $builder,array $options) { $builder->add('thumbnail','image'); $builder->add('file','file'); $builder->add('videoPreset','choice',array( 'choices' => $this->videoPresets,'multiple' => false,'required' => true )); } public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setdefaults(array( 'data_class' => 'OSC\MediaBundle\EntITy\VideoFile' )); } public function getDefaultOptions(array $options) { return array('data_class' => 'OSC\MediaBundle\Entity\VideoFile'); } public function getName() { return 'video_file'; } }
这是我将表单声明为服务的地方:
osc_media.form.type.video_file: class: %osc_media.form.type.video_file.class% arguments: [@service_container] tags: - { name: form.type,alias: video_file }
简单地说,我想要的是覆盖表单模板.正如文档中提到的,我创建了名为OSCMediaBundle的模板:Form:video_file.htML.twig(类似于表单的getName方法的返回字符串):
这不是我的最终模板,只是一个测试:
{% block video_file_widget %} {% spaceless %} <tr> allo <td> {{ form_widget(videoPreset) }} </td> </tr> {% endspaceless %} {% endblock %}
public function createAction(Request $request) { $videoFile = new VideoFile(); $form = $this->createForm('video_file',$videoFile); if ($request->getmethod() == 'POST') { $form->handleRequest($request); if ($form->isValid()) { $em = $this->get('doctrine.orm.entity_manager'); $videoFile = $form->getData(); $em->persist($videoFile); $em->flush(); } } return $this->render('OSCMySportBundle:Video:create.html.twig',array( 'form' => $form->createView() )); }
在我的模板OSCMySportBundle:Video:create.html.twig
{{ form(form) }}
最后,我在配置中声明了表单:
twig: debug: %kernel.debug% strict_VARiables: %kernel.debug% globals: locales: %locales% form: resources: # ... - 'SonataFormatterBundle:Form:formatter.html.twig' - 'OSCMediaBundle:Form:video_file.html.twig'
我清除了缓存和一切,但我无法显示自定义模板.我不知道我在这里做错了什么.
Edit1:在@ Zalex的评论之后,我在我的模板中将video_file重命名为video_file_widget.但是,我仍然没有看到和最终的HTML.
以上是脚本宝典为你收集整理的php – Symfony2 – 为自定义表单类型创建模板全部内容,希望文章能够帮你解决php – Symfony2 – 为自定义表单类型创建模板所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。