Symfony Форма никогда не возвращает значение - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь создать строку поиска, но моя форма не возвращает значение. Я начинаю, я уже сделал symfony формы, но там я действительно не вижу: (

Я использую Symfony 4.12.10. У меня всегда есть результат в symfony profiler:

App \ Entity \ PropertySearch {# 707 ▼ -поиск: ноль}

html:

 <form class="form-inline mr-auto">
                {{ form_start(searchForm) }}
                {{ form_errors(searchForm) }}
                {{ form_row(searchForm.searchbar) }}
                <button type="submit" class="btn btn-secondary my-4 ml-1 my-sm-0">?</button>
                {{ form_end((searchForm)) }}
            </form>

хранилище:

class TextesRepository extends ServiceEntityRepository
{
    public function __construct(ManagerRegistry $registry)
    {
        parent::__construct($registry, Textes::class);
    }

    /**
     * @return Query
     */
    public function findAllVisible(PropertySearch $search)
    {
        $query = $this->createQueryBuilder('p');

        if ($search->getSearchbar()) { //Si l'utilisateur recherche
            $query = $query->andwhere('p.title = :searchbar');
            $query->setParameter('searchbar', $search->getSearchbar());
        }

        return $query->getQuery()->getResult();
    }

форма:

class SearchType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('searchbar', TextType::class, [
                'label' => false,
                'required' => false,
                'attr' => [
                    'placeholder' => 'recherche...',
                    'style' => 'width: 50vw',
                ],]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => PropertySearch::class,
            'csrf_protection' => false,
        ]);
    }
}

сущность для формы:

class PropertySearch{

    private $searchbar;

    /**
     * @return mixed
     */
    public function getSearchbar()
    {
        return $this->searchbar;
    }

    /**
     * @param mixed $searchbar
     * @return PropertySearch
     */
    public function setSearchbar($searchbar)
    {
        $this->searchbar = $searchbar;
        return $this;
    }

}

контроллер:

class TextController extends AbstractController
{
    /**
     * @Route("/liste", name="list")
     */
    public function index(TextesRepository $repo, Request $request)
    {
        $search = new PropertySearch();

        $searchform=$this->createForm(SearchType::class, $search);
        $searchform->handleRequest($request);

        return $this->render('text/index.html.twig', [
            'controller_name' => 'TextController.php',
            'articles' => $repo->findAllVisible($search),
            'searchForm' => $searchform->createView()
        ]);
    }

1 Ответ

0 голосов
/ 05 марта 2020

Вам не нужно использовать тег формы, потому что form_start и form_end уже создает этот тег.

Из-за этого у вас есть форма внутри формы, что может вызвать некоторые проблемы в html формы.

{{ form_start(searchForm) }}
    {{ form_errors(searchForm) }}
    {{ form_row(searchForm.searchbar) }}
    <button type="submit" class="btn btn-secondary my-4 ml-1 my-sm-0">?</button>
{{ form_end((searchForm)) }}

Документация

Также я рекомендую вам добавить кнопку отправки в форму. Ссылка

...