Lexik Filter-: 参数 1 传递给 SymfonyComponentFormFormRender


Lexik Filter-: Argument 1 passed to SymfonyComponentFormFormRenderer::searchAndRenderBlock()

我是Symfony2的新手,并尝试使用Lexik Filter捆绑包;我有 2 个实体(父母训练(以 n-m(多对多(关系链接,如下定义,我正在尝试按名称过滤父母列表:'tuto''LexikTestBundle''实体''父母:

type: entity
table: Parents
repositoryClass: tuto'LexikTestBundle'Repository'ParentRepository
id:
    id:
        type: integer
        generator:
            strategy: AUTO
fields:
    Firstname:
        type: string
        length: 50
    Lastname:
        type: string
        length: 50
    DOB:
        type: datetime
    Email:
        type: string
        length: 50
manyToMany:
    Trainings:
        targetEntity: Training
        mappedBy: parents`  

我正在按照教程使用 ver 3.0.8 并定义以下自定义过滤器类型:

namespace tuto'LexikTestBundle'Form'Filter;
use Symfony'Component'Form'AbstractType;
use Symfony'Component'Form'FormBuilderInterface;
use Symfony'Component'OptionsResolver'OptionsResolverInterface;

class MyParentsType extends AbstractType
{
    /**
     * Returns the name of this type.
     *
     * @return string The name of this type
     */
    public function getName()
    {
        return 'parents_filter';
    }
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('Firstname', 'filter_text');
        $builder->add('Lastname', 'filter_text');
    }
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(
            [
                'csrf_protection' => false,
                'validation_groups' => ['filtering'] // avoid NotBlank() constraint-related message
            ]
        );
    }
}

以及控制器中的以下过滤器操作:

public function indexAction(Request $request)
{

    $em = $this->getDoctrine()->getManager();
    $entities = $em->getRepository('tutoLexikTestBundle:Parents')->findAll();
    $form = $this->testFilterAction($request);
    return $this->render('tutoLexikTestBundle:Parents:index.html.twig', [
        'entities' => $entities,
        'form' => $form,
    ]
    );
}
public function testFilterAction(Request $request)
{
    $form= $this->get('form.factory')->create(new MyParentsType());
    if($request->query->has($form->getName())) {
        // manually bind values from the request
        $form->submit($request->query->get($form->getName()));
        $queryBuilder = $this->get('doctrine.orm.entity_manager')
            ->getRepository('LexikTestBundle:Parents')
            ->createQueryBuilder('e');
        //build the query from the given object
        $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form,$queryBuilder);
        var_dump($queryBuilder->getDql());
    }
    return $this->render(
        'tutoLexikTestBundle:Default:testFilter.html.twig',
        ['form'=>$form->createView()]
    );
}

实现的树枝是

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

我已经浏览了以下答案,似乎没有同样的错误:

  • getForm->createView
  • 表单显示
  • 莱克克过滤器
  • 克恩普表单渲染

但我仍然面临可捕获的致命错误:传递给Symfony''Component''Form''FormRenderer的参数1::searchAndRenderBlock((必须是Symfony''Component''Form''FormView的实例,Symfony''Component''HttpFoundation''Response的实例,任何提示都是受欢迎的。

您应该呈现表单视图而不是表单对象:

public function indexAction(Request $request)
{
    $em = $this->getDoctrine()->getManager();
    $entities = $em->getRepository('tutoLexikTestBundle:Parents')->findAll();
    $form = $this->testFilterAction($request);
    return $this->render('tutoLexikTestBundle:Parents:index.html.twig', [
        'entities' => $entities,
        'form' => $form->createView(),
    ]);
}
<小时 />

您的 testFilterAction 返回一个响应对象,而不是表单对象或视图,请按如下方式更改您的方法:

注意:您可以在tutoLexikTestBundle:Parents:index.html.twig视图中嵌套表单模板

public function testFilterAction(Request $request)
{
    $form = $this->get('form.factory')->create(new MyParentsType());
    if ($request->query->has($form->getName())) {
        // manually bind values from the request
        $form->submit($request->query->get($form->getName()));
        $queryBuilder = $this->get('doctrine.orm.entity_manager')
            ->getRepository('LexikTestBundle:Parents')
            ->createQueryBuilder('e');
        // build the query from the given object
        $this->get('lexik_form_filter.query_builder_updater')->addFilterConditions($form,$queryBuilder);
        var_dump($queryBuilder->getDql());
    }
    return $form; // return form object
}
相关文章:
  • 没有找到相关文章