我有三個項目實體:Book,Author和Theme。有關信息,作者和主題與許多對一/一對多的書聯繫在一起。一本書有一個或多個作者和一個或多個主題。 而且我已經生成了關於基礎函數(添加,編輯和刪除)和默認視圖/表單的論文。Symfony 2 - 用於搜索表單的Differents字段比列表
但我需要做一些搜索功能,三正是:
- 搜索隨書標題
- 搜索圖書的一部分,一個作者
- 搜索簿與一個或多個主題。
我編碼的三個功能和工作良好,但我有一個關於在搜索表單中使用的字段的問題。
第一個是正確的,它表明我們把標題和結果是正確的圖書列表,但兩個人一個輸入字段...
因爲關係的字段是下拉列表,其中用戶選擇一個項目和搜索它,結果是正確的,但我希望第二個有搜索作者姓名和最後顯示覆選框的輸入字段,所以我做了研究,但我不明白爲什麼在我的表單類型,我無法改變我想要的領域。
這裏我有兩種形式類型:
搜索一個作者:我只是想顯示一個輸入字段,而不是一個列表,但一次比一次錯誤
<?php namespace Projet\BibliothequeBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class BookByAuthorType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('authors')
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Projet\BibliothequeBundle\Entity\Book'
));
}
/**
* @return string
*/
public function getName()
{
return 'authors';
}
}
搜索簿與一個或多個主題:我試圖通過鏈接「主題」數組來顯示chechbox,但不起作用。
<?php namespace Projet\BibliothequeBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
class BookByThemeType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
// $themes = array();
// $themes=$builder->add('themes');
$builder
->add('themes', 'choice', [
'choices' => 'themes',
'multiple' => true,
'expanded' => true
])
;
}
/**
* @param OptionsResolverInterface $resolver
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Projet\BibliothequeBundle\Entity\Book'
));
}
/**
* @return string
*/
public function getName()
{
return 'themes';
}
}
更新:我的BookController函數可能是我的問題的根源。
// AUTHOR SEARCH FUNCTIONS
public function SearchByAuthorAction() {
$entity = new Book();
$form = $this->CreateSearchAuthorForm($entity);
return $this->render('ProjetBibliothequeBundle:Book:searchbyauthor.html.twig', array(
'form' => $form->createView(),
));
}
private function CreateSearchAuthorForm(Book $entity) {
$form = $this->createForm(new BookByAuthorType(), $entity, array(
'action' => $this->generateUrl('book_submit_search_by_author'),
'method' => 'POST',
));
$form->add('submit', 'submit', array('label' => 'Search'));
return $form;
}
public function SubmitSearchByAuthorAction(Request $request) {
$entity = new Book();
$form = $this->CreateSearchAuthorForm($entity);
$form->handleRequest($request);
$author = $form->get('authors')->getData();
$repository = $this->getDoctrine()
->getEntityManager()
->getRepository('ProjetBibliothequeBundle:Book');
$Booklist = $repository->findByAuthor($author);
return $this->render('ProjetBibliothequeBundle:Book:resultbyauthor.html.twig',
array('Booklist' => $Booklist));
}
//THEME SEARCH FUNCTIONS
public function SearchByThemeAction() {
$entity = new Book();
$form = $this->CreateSearchThemeForm($entity);
return $this->render('ProjetBibliothequeBundle:Book:searchbytheme.html.twig', array(
'form' => $form->createView(),
));
}
private function CreateSearchThemeForm(Livre $entity) {
$entities = $this->getDoctrine()->getManager()->getRepository('ProjetBibliothequeBundle:Book')->findAll();
$form = $this->createForm(new BookByThemeType(), $entity, array(
'action' => $this->generateUrl('book_submit_search_by_theme'),
'method' => 'POST',
));
$form->add('submit', 'submit', array('label' => 'Search'));
return $form;
}
public function SubmitSearchByThemeAction(Request $request) {
$entity = new Book();
$form = $this->CreateSearchThemeForm($entity);
$form->handleRequest($request);
$theme = $form->get('themes')->getData();
$repository = $this->getDoctrine()
->getEntityManager()
->getRepository('ProjetBibliothequeBundle:Book');
$Booklist = $repository->findByTheme($theme);
return $this->render('ProjetBibliothequeBundle:Book:resultbytheme.html.twig',
array('Booklist' => $Booklist));
}
我有一個錯誤:「捕致命錯誤:傳遞給Symfony \ Component \ Form \ Extension \ Core \ ChoiceList \ SimpleChoiceList :: __ construct()的參數1必須是類型數組,字符串給定,在/.../symfony/vendor/symfony/symfony/中調用第172行的src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php,並在/.../symfony/vendor/symfony/symfony/src/Symfony/Component/Form/Extension/Core/ChoiceList/ SimpleChoiceList.php行45「 – Tenebros
是的我在BookRepository中使用了FindByTitle,FindByThemes和FindByAuthors三種方法。 – Tenebros
我用我的BookController函數更新了我的帖子。 – Tenebros