【问题标题】:Symfony2 render and formSymfony2 渲染和表单
【发布时间】:2013-10-17 15:31:10
【问题描述】:

我想在我的网站的多个页面中使用一个表单。 所以我在我的页面中调用这样的方法:

{{ render(controller('ProjectApplicationBundle:Application:form')) }}

我有我的 formAction 方法:

public function formAction()
{
    $form = $this->createForm($type,$obj);

    if('POST' == $this->getRequest()->getMethod()){
       $form->submit($this->getRequest());
       if($form->isValid()){
           //redirect to a page after the form
       }
    }
    //render the form template ...
}

这不是我的代码,这只是一个例子。

所以我添加了一个路由来发送我的表单

project_application_form:
    pattern:  /form
    defaults: { _controller: ProjectApplicationBundle:Application:form }

现在我的问题:)

1) 我想阻止使用 url 访问我的表单,只允许数据处理。

2)如果出现错误,页面不会重定向,所以表单显示没有布局,所以我想在我呈现表单的页面中获取有错误的表单。

编辑:我可能有第二点的解决方案,但这不是很合适。 在我的渲染路由的参数中设置并返回到路由而不是渲染表单。最后我用一个会话来放错误。

我希望这对你来说很清楚,对不起我的英语。

【问题讨论】:

  • 阻止访问表单并只允许数据处理是什么意思?你想让路由只能被 POST 请求访问吗?
  • 看来你必须在你需要的所有控制器操作中使用你的表单类型

标签: php forms symfony render


【解决方案1】:

您必须确保处理表单的操作安全,并仅由POST 提供

例子:

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;

class RegisterController extends Controller
{
    /**
     * @Route("/register/process", name="process_form_register")
     * @Method({"POST"})
     */
    public function processAction(Request $request)
    {
        $form = $this->createFrom(new RegisterType());
        $form->submit($request);

        if($form->isValid()){
           //redirect to a page after the form
        }
    }
}

如果你对路由使用yml 语法,它将是:

process_form_register:
    pattern:  /register/process
    defaults: { _controller: ...... }
    requirements:
        _method:  POST

为您的 2) 点打开一个新问题,因为每个线程只有一个问题,这是另一个问题

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-07-23
  • 1970-01-01
  • 2017-01-26
  • 2012-03-21
  • 2013-05-20
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多