Symfony, сохраняйте аргументы Get в форме поиска после отправки

#php #symfony

#php #symfony

Вопрос:

Привет,

я создал форму поиска, используя метод GET, для моего indexAction форма содержит виртуальные поля.

я создал логику для поиска внутри indexAction.

Моя проблема в том, что когда я отправляю форму, все входные значения становятся пустыми.

Я хочу сохранить значения, передаваемые в качестве аргументов во входных данных формы

вот мой FormType :

     public function buildForm(FormBuilderInterface $builder, array $options) {
    $builder
        ->add('title', TextType::class, array(
            'required' => false,
            'attr' => array(
                'placeholder' => 'Chercher',
            )
        ))
        ->add('client', EntityType::class, array(
            'required' => false,
            'class' => 'AppBundle:Person',
            'placeholder' => 'Choisir client',
            'attr' => array(
                'class' => 'select2',
            )
        ))
        ->add('date_start', DateTimeType::class, array(
            'required' => false,
            'input' => 'datetime',
            'widget' => 'single_text',
            'format' => 'dd-MM-yyyy',
            'inherit_data' => true,
            'attr' => array(
                'name' => 'date_start',
                'class' => 'datepicker',
                'placeholder' => 'Date début',
                'value' => ''
            )
        ))
        ->add('date_end', DateTimeType::class, array(
            'required' => false,
            'input' => 'datetime',
            'widget' => 'single_text',
            'format' => 'dd-MM-yyyy',
            'inherit_data' => true,
            'attr' => array(
                'name' => 'date_end',
                'class' => 'datepicker',
                'placeholder' => 'Date fin',
                'value' => ''
            )
        ))
    ;
}
  

Индексация :

     public function indexAction(Request $request)
{
    $getArgs = $request->query->get('order');
    dump($getArgs);
    $form = $this->createForm('AppBundleFormSearchOrderType', new Order(), array('get' => $getArgs));
    $form->handleRequest($request);

    $repo = $this->getDoctrine()->getRepository('AppBundle:Order');
    $query = $getArgs ? $repo->findAllMatched($q) : $repo->createQueryBuilder('o');

    $paginator = $this->get('knp_paginator');
    $orders = $paginator->paginate($query);

    return $this->render('AppBundle:Order:index.html.twig', array(
        'orders' => $orders,
        'form' => $form->createView(),
    ));
}
  

Любые предложения приветствуются.

Комментарии:

1. Сохраните значения в сеансе, а затем извлеките их в следующий раз, когда вам понадобится отобразить форму.

2. я использую сгенерированные входные данные формы из объекта FormType, у меня нет входных данных в моем файле шаблона, потому что я отображаю {{ form}} , поэтому не стоит менять весь код на входные данные html и использовать там данные сеанса!!

3. Понятия не имею, что вы только что сказали. Вы хотите сохранить название, клиента и даты? Сохраняйте их в сеансе и отправляйте их в форму, когда вы создаете ее в своем контроллере.

4. @BoubouhKarim Можешь показать свой шаблон?

Ответ №1:

На данный момент я решил проблему таким образом :

             <div class="nav box-search">
            <form method="GET" class="form-inline">
                <div class="pull-right">
                     <button type="submit" class="btn btn-default">{{ 'actions.search' | trans }}</button>
                </div>
                <div class="pull-left">
                    {% set params = app.request.query.all %}
                    {{- form_widget(form.title, { 'attr': {'value': params.order.title| default('')} }) -}}
                    {{ form_widget(form.client,  {value: params.order.client| default('') }) }}
                    {{- form_widget(form.date_start, { 'attr': {'value': params.order.date_start| default('')} }) -}}
                        <i class="fa fa-exchange"></i>
                    {{- form_row(form.date_end, { 'attr': {'value': params.order.date_end| default('')} }) -}}
                </div>
            </form>
        </div>
  

Это не такое уж плохое решение, но я бы хотел иметь конфигурацию этих параметров в FormType.