带有Lexik Form Filter软件包的symfony2过滤器: [英] symfony2 filter with Lexik Form Filter bundle:

查看:261
本文介绍了带有Lexik Form Filter软件包的symfony2过滤器:的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有实体诊所,

表格类型:



  namespace AgriHealth \AhpBundle\Form\Type\Clinic; 

使用Symfony \ Component\Form\AbstractType;
使用Symfony \ Component\Form\FormBuilderInterface;
使用Symfony \ Component\OptionsResolver\OptionsResolverInterface;
$ b $ class ClinicFilterType extends AbstractType
{
public function buildForm(FormBuilderInterface $ builder,array $ options)
{
$ builder-> add('名称','filter_text');


public function getName()
{
return'item_filter';


public function setDefaultOptions(OptionsResolverInterface $ resolver)
{
$ resolver-> setDefaults(array(
'csrf_protection'=> false ,
'validation_groups'=> array('filtering')//避免与NotBlank()约束相关的消息
));


code $
$ b $控制器设置

  public function indexAction(Request $ request)
{
$ em = $ this-> getDoctrine() - > getManager();
$ b $ entities = $ em-> getRepository('AgriHealthAhpBundle:Clinic') - > findAll();
$ filter = $ this-> renderFilter($ request);
$ b $ return $ this-> render('AgriHealthAhpBundle:Clinic:index.html.twig',array(
'entities'=> $ entities,
'form' => $ filter
));

$ b private function renderFilter(Request $ request)
{
$ form = $ this-> get('form.factory') - > create (新的ClinicFilterType());
$ b $ if($ request-> query-> has($ form-> getName())){
//手动绑定请求中的值
$ form - >提交($这个 - >获得( '请求') - >查询 - >获得($形式 - >的getName()));

//初始化查询生成器
$ filterBuilder = $ this-> get('doctrine.orm.entity_manager')
- > getRepository('AgriHealthAhpBundle:Clinic' )
- > createQueryBuilder('e');

//从给定的表单对象构建查询
$ this-> get('lexik_form_filter.query_builder_updater') - > addFilterConditions($ form,$ filterBuilder);

//现在看看DQL =)
var_dump($ filterBuilder-> getDql());

$ b $ return $ this-> render('AgriHealthAhpBundle:Clinic:filter.html.twig',array(
'form'=> $ form-> createView(),
));




$ p






 可捕获的致命错误:类Symfony \ Component \Form\FormView的对象无法转换为字符串

我是否忽略了表单类中的某些内容?

解决方案

你如何在 filter.html.twig 中渲染你的表单?也许在你的模板中有一个错字。基本的lexik过滤器表单呈现可能如下所示:

 < form method =getaction =。> 
{{form_rest(form)}}
< input type =submitname =submit-filtervalue =filter/>
< / form>


I have entity Clinic,

Form Type:

namespace AgriHealth\AhpBundle\Form\Type\Clinic;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

class ClinicFilterType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name', 'filter_text');
    }

    public function getName()
    {
        return 'item_filter';
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'csrf_protection'   => false,
            'validation_groups' => array('filtering') // avoid NotBlank() constraint-related message
        ));
    }
}

controller setup

public function indexAction(Request $request)
{
    $em = $this->getDoctrine()->getManager();

    $entities = $em->getRepository('AgriHealthAhpBundle:Clinic')->findAll();
    $filter = $this->renderFilter($request);

    return $this->render('AgriHealthAhpBundle:Clinic:index.html.twig', array(
        'entities' => $entities,
        'form' => $filter
    ));
}

private function renderFilter(Request $request)
{
    $form = $this->get('form.factory')->create(new ClinicFilterType());

    if ($request->query->has($form->getName())) {
        // manually bind values from the request
        $form->submit($this->get('request')->query->get($form->getName()));

        // initialize a query builder
        $filterBuilder = $this->get('doctrine.orm.entity_manager')
            ->getRepository('AgriHealthAhpBundle:Clinic')
            ->createQueryBuilder('e');

        // build the query from the given form object
        $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form, $filterBuilder);

        // now look at the DQL =)
        var_dump($filterBuilder->getDql());
    }

    return $this->render('AgriHealthAhpBundle:Clinic:filter.html.twig', array(
        'form' => $form->createView(),
    ));

}

I'm getting

Catchable Fatal Error: Object of class Symfony\Component\Form\FormView could not be converted to string

Have I overlooked something in the form class?

解决方案

How do you render your form in filter.html.twig? Maybe there is a typo in your template. Basic lexik filter form render could look like this:

<form method="get" action=".">
    {{ form_rest(form) }}
    <input type="submit" name="submit-filter" value="filter" />
</form>

这篇关于带有Lexik Form Filter软件包的symfony2过滤器:的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆