加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何处理多个页面上使用的表单?

发布时间:2020-12-13 17:08:23 所属栏目:PHP教程 来源:网络整理
导读:我有一个我需要在多个页面上使用的表单: 调节器 $emailForm = $this-get('form.factory')-createNamedBuilder('form','email_form') -add('email','email') -add('subject','text') -add('body','textarea') -getForm();$request = $this-get('request');if
我有一个我需要在多个页面上使用的表单:

调节器

$emailForm = $this->get('form.factory')->createNamedBuilder('form','email_form')
    ->add('email','email')
    ->add('subject','text')
    ->add('body','textarea')
    ->getForm();

$request = $this->get('request');

if ($request->getMethod() == 'POST' && $request->request->has('email_form') ) {
    $emailForm->bindRequest($request);

    if ($emailForm->isValid()) {

        // do stuff ...

        $this->get('session')->setFlash('email_sent',"Woey,mail sent successfully!");

        // Redirect on the same url to prevent double posts
        return $this->redirect($this->generateUrl($this->getRequest()->attributes->get('_route')));
    }
}

return $this->render('Bundle:Form:index.html.twig',array('email_form' => $emailForm->createView()));

模板

{% if app.session.getFlash('email_sent') %}
    <p>{{ app.session.getFlash('email_sent') }}</p>
{% endif %}

<form action="{{ path(app.request.attributes.get('_route')) }}" method="post" {{ form_enctype(email_form) }}>
    {{ form_widget(email_form) }}

    <p><input type="submit" class="submit" value="Send" /></p>
</form>

它实际上只是标准的Symfony2形式,几乎与教程一样.

我无法想象如何在不重复自己(太多)的情况下在多个页面上(在多个控制器操作中)有效地使用它.到目前为止我试过:

>将逻辑放入Base控制器,它是我希望拥有此表单的每个控制器的父控制器.这种方法存在两个问题:

>我无法想象如何正确地重定向到同一页面
>我不得不在每个动作中调用父方法,这不是一个真正的问题,但我想必须有一些更优雅的方式

>使用embedded controllers在树枝中渲染控制器.但是,我无法想象how to redirect properly.

那么,这种形式的常见方法是什么?

编辑:

我正在寻找一个无脚本解决方案.

解决方法

我最终在我需要的每个页面上使用嵌入式控制器,发布到不同的URL并使用referrer保存cookie.然后我验证表单,保存带结果的cookie,重定向回引用并呈现结果(错误,谢谢消息……).当您处理必须考虑禁用Javascript的场景时,这似乎是最佳选择.对于用户使用AJAX发布的情况,您可以使用简单条件轻松禁用冗余cookie / flash会话的创建.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读