KU案例2之18 处理表单提交

来吧,让我们处理表单的提交!由于我们提交回原来的路由和控制器,所以我们需要处理post请求。

获取Request对象

首先,我们需要symfony的Request对象。为了能够得到它,我们要添加一个$request参数,并加上强制类型Request。

通常情况下,symfony在这里有一个参数,symfony会尝试从路由匹配规则来填充这个变量。如果没有找到,他会抛出一个巨大的错误。唯一的例外就是上面的例子:如果你传入一个Request类型的参数,他不会匹配路由规则。但这并不是适用于一切的,只是适用于Request方式的工作。

适用handleRequest

适用handleRequest方法来处理数据。接下来,添加一个if语句检查表单是否提交和数据是否有效:

该handleRequest方法会从request中抓取post数据,并进行处理,还会运行验证。有哪些验证呢比如:我们的程序是一个get请求,那么$form->isSubmitted()会返回false。

如果你的表单使用不同的http方法提交,你需要查看 form method

如果是一个post请求并且验证通过,我们就输出提交的数据。如果表单无效或者是一个get请求,他就会跳过此块重新渲染表单。

测试一下吧!我们虽然还没有添加验证,但是密码字段中已经内置了验证,如果不匹配。当我们提交表单时,重新渲染会出现错误。

在网页的debug工具条上,可以看到相关表单详细信息。

返回并正确填写表格信息。现在你会看到输出的数据:

 

如何使用这个提交的数据

注意这个数组是每一个字段的键值对。让我们根据传过来的数据一一分配给User对象。这是很简单的方式:

编译用户密码

我们仍然需要对密码进行编译。现在让我们从fixtures复制一些代码到这里。

使用这个函数完成persist并且flush这个新User:

重定向到成功页

任何表单提交后,都会有重定向这个步骤-我们将他重定向到主页。首先,我们需要生成一个URL-就像我们在twig中的path()函数。在控制器中,用generateUrl函数实现同样的工作原理。

跳转的话,要使用redirect函数:

请记住,一个控制器总是会返回一个Response对象。redirect仅仅是一个快捷方法,它去创建一个响应 ,跳转到设置的url上。

好了,正如预期的那样,我们来到了首页。甚至可以用新的用户登录!

 

你可以不使用isSubmitted

返回控制器并移除if语句中的isSubmitted():

这样做不会改变程序的,因为isValid()会自动判断表单提交-这意味着,如果请求不是POST,也会返回false。 如果你非要添加isSubmitted部分,它可以让你的程序变得清晰和更加详细。

 

One comment

发表评论