gpt4 book ai didi

forms - 在 Symfony2 中过滤列表?

转载 作者:行者123 更新时间:2023-12-03 23:26:39 25 4
gpt4 key购买 nike

你好,我试过 Symfony,我是一个非常新手。
我正在寻找一种优雅的方式来过滤列表。

让我解释:

我有两个实体:链接和标签。他们是多重关系。

在我的索引 View 中,我创建了这个表单。我做了一个 findAll() 来获取我所有的选择标签:

<form method="GET" action="">
<input class="btn btn-default" type="submit"/>
<select name="tags[]" class="selectpicker" multiple="yes">
{% for tag in tags %}
<option value="{{ tag.id }}"> {{ tag.title }}</option>
{% endfor %}
</select>
</form>

这是我通过 DESC 获取所有链接顺序的方式:
$links = $em->getRepository('TestDefaultBundle:Link')->findBy(
array(),
array('id' => 'desc')
);

如何收集选定的标签(在 Controller 中)并通过这些选定的标签获取所有链接过滤器。

另一个问题我知道我们可以为实体生成一个表单,但是这种表单呢?

编辑

这是我的 indexAction:
public function indexAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$tags = $em->getRepository('LanCrmBundle:LinkTag')->findAll();

// Create the filter form.
$form = $this->createFormBuilder()
->add('tags', 'entity', array(
'class' => 'LanCrmBundle:LinkTag',
'multiple' => true,
'expanded' => false,
'query_builder' => function (EntityRepository $er) {
return $er->createQueryBuilder('u')
->orderBy('u.title', 'ASC');
}
))
->add('OK', 'submit')
->getForm()
;

$form->handleRequest($request);

if ($form->isValid()) {
$data = $form->getData();

// Get all links filtered by tags.
// How to use the $data to filter my links?
$links = $em->getRepository('LanCrmBundle:Link')->findBy(
array(),
array('id' => 'desc')
);
} else {
// Get all links.
$links = $em->getRepository('LanCrmBundle:Link')->findBy(
array(),
array('id' => 'desc')
);
}

$paginator = $this->get('knp_paginator');
$pagination = $paginator->paginate(
$links,
$this->get('request')->query->get('page', 1),
4
);

return $this->render('LanCrmBundle:Link:index.html.twig', array(
'pagination' => $pagination,
'tags' => $tags,
'form' => $form->createView()
));
}

我有这个错误:

在传递给选择字段的“Lan\CrmBundle\Entity\LinkTag”类型的对象上找不到“__toString()”方法。要改为读取自定义 getter,请将选项“属性”设置为所需的属性路径。

StringCastException:在传递给选择字段的“Lan\CrmBundle\Entity\LinkTag”类型的对象上找不到“__toString()”方法。要改为读取自定义 getter,请将选项“属性”设置为所需的属性路径。

最佳答案

实际上最好的做法是创建 Type 类。制作过滤器的一个很好的捆绑包是
https://github.com/lexik/LexikFormFilterBundle

我创建了一个 typeGuesser Bundle,它使用 lexik 的类型来创建一个以 EntityFormType 类为参数的 filterForm。 https://github.com/juanmf/FilterTypeGuesserBundle

安装了这两个包并且您的类型类就位后,代码将简化为过滤器和用于创建查询的方法(我在 README.md 中留下了一个示例)。

    private function createFilterForm($docType)
{
$adapter = $this->get('dd_form.form_adapter');
$type = $this->getFormForDocument($this->getClassFromDocType($docType));
return $adapter->adaptForm(
$type,
$this->generateUrl('document_search', array('docType' => $docType)),
array('pdfPath', 'pdfPages', 'batchStatus', 'createdInBatch', 'documentType')
);
}

注:从 Sf >= 2.8 formTypes 更改为 FQCN,因此 typeGuesser 找不到类型名称。需要修复。

关于forms - 在 Symfony2 中过滤列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22196006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com