繁体   English   中英

Symfony 4.1.4 isSubmitted()在渲染形式上不起作用

[英]Symfony 4.1.4 isSubmitted() doesn't work on rendered form

所以我有这个简单的形式:

    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一起工作了四个星期,所以没有那么久。

我只想在表单没有提交任何内容的情况下调用某些函数,如果我在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 %}

问题在于,该表单是在不执行任何操作的情况下呈现的,并且在提交时默认情况下将其提交到呈现该表单的根路由。 因此,并未调用功劳行动。 您应该像这样更改表单的操作:

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 %}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM