你好,我試過Symfony,我是一個非常新手。 我正在尋找一個優雅的方式來過濾清單。在Symfony2中過濾列表?
讓我解釋一下:
我有兩個實體:鏈接和標籤。他們有多重關係。
在我的索引視圖中,我創建了此表單。我做了的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')
);
我怎麼能收集所選標籤(在控制器)並抓取所有鏈接按這些選定標籤過濾。
另一個問題我知道我們可以爲一個實體生成一個表單,但是這種表單呢?
編輯
這是我的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()
));
}
我得到這個錯誤:
A 「__toString()」 的類型的對象未找到方法「 Lan \ CrmBundle \ Entity \ LinkTag「傳遞給選擇字段。要改爲讀取自定義getter,請將選項「屬性」設置爲所需的屬性路徑。
StringCastException:在傳遞給選擇字段的類型爲「Lan \ CrmBundle \ Entity \ LinkTag」的對象上找不到「__toString()」方法。要改爲讀取自定義getter,請將選項「屬性」設置爲所需的屬性路徑。
注:截至Sf> = 2。8個formTypes更改爲FQCN,因此typeGuesser找不到類型名稱。修復需要。 – juanmf