У меня есть три объекта для проекта: Book, Author and Theme. Для информации автор и тема связаны с книгой от многих к одному/одному. В книге есть один или несколько авторов и одна или несколько тем. И я сгенерировал краткий обзор тезисов для основных функций (добавить, отредактировать и удалить) и по умолчанию представления/формы.Symfony 2 - Различает поля для формы поиска, чем список
Но мне нужно сделать некоторые функции поиска, три точно:
- Поиска книги с частью Поиска книг Названия
- с одним Автором
- Поиска книг с одним или более Темой.
Я закодировал три функции и работал хорошо, но у меня есть проблема с полями, используемыми в формах поиска.
Первый является правильным, это показывает поле ввода, где мы помещаем название и список книг, как результат является правильным, но два другими ...
Из-за отношения месторождения выпадающего список, где пользователь может выбрать результат и поиск, результат правильный, но я хочу, чтобы у второго было поле ввода для поиска имени автора и последнего для отображения флажка, поэтому я сделал исследование, но я не могу понять, почему в моем типе форм, Я не могу изменить поле, которое я хочу.
Вот мои две формы Тип:
Поиск с одним Автор: Я просто хочу, чтобы отобразить поле ввода, а не список, но получаю ошибку каждый раз, когда
<?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';
}
}
Поиск книги с одним или несколькими Theme : Я попытался отобразить 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));
}
У меня есть ошибка: "Catchable Неустранимая ошибка: аргумент 1 передан в Symfony \ Component \ Form \ Extension \ Core \ ChoiceList \ SimpleChoiceList :: __ construct() должен быть из массива типа, строки, указанной в /.../symfony/vendor/symfony/symfony/ src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php в строке 172 и определен в /.../symfony/vendor/symfony/symfony/src/Symfony/Component/Form/Extension/Core/ChoiceList/ Строка JustChoiceList.php 45 " – Tenebros
Да, я использую три метода в BookRepository, которые являются FindByTitle, FindByThemes и FindByAuthors. – Tenebros
Я обновил свой пост с помощью моих функций BookController. – Tenebros