Symfony 4.1.4 isSubmitted () не работает на визуализированной форме - PullRequest
0 голосов
/ 24 сентября 2018

Итак, у меня есть эта простая форма:

    class CreditType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('credits', EntityType::class, [
            'class' => Product::class,
            'query_builder' => function (EntityRepository $er) {
                return $er->createQueryBuilder('product')
                          ->orderBy('product.amount');
            },
            'expanded' => true,
            'choice_label' => function ($key) {
                return $key->amount.' credits voor maar '.$key->price;
            }
        ]);
    }
}

, которую я использую в следующем контроллере:

public function credits(Request $request)
{
    $form = $this->createForm(CreditType::class);
    $form->handleRequest($request);

    if ($form->isSubmitted()) {
        throw new \Exception('It works!');
    }
    return $this->render(
        'credits/credits_widget.html.twig',
        [
            'form' => $form->createView(),
        ]
    );
} 

И использую это в моем XXX.html.twig

{{ render(controller('App\\Controller\\DetailsController:credits')) }}

Я работаю с Symfony уже 4 недели, так что не так долго.

Я хочу вызывать некоторые функции, когда форма отправляется только то, что я помещаю в оператор if работает, она не выдает никаких исключений в данный момент.Я что-то не вижу или это невозможно сделать при рендеринге формы?

РЕДАКТИРОВАТЬ: мой credits_widget.html.twig

{% block credits %}
        {{ form_start(form.credits) }}
        {{ form_widget(form.credits) }}

        {% if app.user %}
            <button type="submit">Koop nu!</button>
        {% else %}
            <a href="#login-form"><button type="button">Login en koop</button></a>
            <a href="{{ path('user_registration') }}"><button type="button">Registreer en koop</button></a>
        {% endif %}
        {{ form_end(form.credits) }}
{% endblock %}

1 Ответ

0 голосов
/ 24 сентября 2018

Проблема заключается в том, что форма отображается без действий, и при отправке она отправляется по умолчанию в корневой маршрут, с которого она была отображена.Таким образом, действие кредитов не вызывается.Вы должны изменить действие формы следующим образом:

public function credits(Request $request)
{
    // set current url path as form's action 
    $form = $this->createForm(CreditType::class, null, , [
        'action' => $request->getRequestUri()
    ]);

    $form->handleRequest($request);

    if ($form->isSubmitted()) {
        throw new \Exception('It works!');
    }
    return $this->render(
        'credits/credits_widget.html.twig',
        [
            'form' => $form->createView(),
        ]
    );
}

РЕДАКТИРОВАТЬ : в настоящее время вы визуализируете подчиненную форму form.credits, когда вы действительно должны визуализировать форму, передаваемую из вашего контроллера.Ваш шаблон credits_widget.html.twig должен выглядеть следующим образом:

{% block credits %}
        {{ form_start(form) }}
            {{ form_widget(form) }}

            {% if app.user %}
                <button type="submit">Koop nu!</button>
            {% else %}
                <a href="#login-form"><button type="button">Login en koop</button></a>
                <a href="{{ path('user_registration') }}"><button type="button">Registreer en koop</button></a>
            {% endif %}
        {{ form_end(form) }}
{% endblock %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...