<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Symfony中文教程 &#187; Registerform</title>
	<atom:link href="http://www.newlifeclan.com/symfony/archives/tag/registerform/feed" rel="self" type="application/rss+xml" />
	<link>http://www.newlifeclan.com/symfony</link>
	<description>站在巨人肩膀上的phpweb框架</description>
	<lastBuildDate>Fri, 12 Dec 2025 00:58:27 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.0.38</generator>
	<item>
		<title>KU案例2之15 注册表单</title>
		<link>http://www.newlifeclan.com/symfony/archives/444</link>
		<comments>http://www.newlifeclan.com/symfony/archives/444#comments</comments>
		<pubDate>Sat, 11 Apr 2015 08:23:43 +0000</pubDate>
		<dc:creator><![CDATA[napoleon]]></dc:creator>
				<category><![CDATA[实战教程]]></category>
		<category><![CDATA[Registerform]]></category>
		<category><![CDATA[symfony注册表单]]></category>

		<guid isPermaLink="false">http://www.newlifeclan.com/symfony/?p=444</guid>
		<description><![CDATA[<p>让我们的网站增加一个注册表单。去喝点咖啡吧，因为我们马上就要学习一些表单和验证的强大知识。 创建注册页面 让我 [&#8230;]</p>
<p><a rel="nofollow" href="http://www.newlifeclan.com/symfony/archives/444">KU案例2之15 注册表单</a>，首发于<a rel="nofollow" href="http://www.newlifeclan.com/symfony">Symfony中文教程</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>让我们的网站增加一个注册表单。去喝点咖啡吧，因为我们马上就要学习一些表单和验证的强大知识。<span id="more-444"></span></p>
<h2>创建注册页面</h2>
<p>让我们在UserBundle中创建一个新的RegisterController类。手动创建控制器很简单：只需要添加命名空间，然后继承symfony的controller基类。创建一个registerAction方法来渲染我们的注册页面：</p><pre class="crayon-plain-tag">// src/Yoda/UserBundle/Controller/RegisterController.php
namespace Yoda\UserBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;

class RegisterController extends Controller
{
    public function registerAction()
    {
        // todo
    }
}</pre><p>我们继续用annotation路由。记住，要这样做需要两个步骤：首先，添加路由之前要声明。然后，就可以在方法上标注了：</p><pre class="crayon-plain-tag">// src/Yoda/UserBundle/Controller/RegisterController.php

// ...
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

class RegisterController extends Controller
{
    /**
     * @Route("/register", name="user_register")
     */
    public function registerAction()
    {
        // todo
    }
}</pre><p>其次，把此路由写入到routing.yml。嗨！我们已经把整个控制器目录都设成annotations，所以不用在写入了。已经ok了。</p><pre class="crayon-plain-tag"># app/config/routing.yml
# ...

user_routes:
    resource: "@UserBundle/Controller"
    type: annotation</pre><p>输入命令看看路由是否加载：</p><pre class="crayon-plain-tag">php app/console router:debug</pre><p>是的，看到了！</p>
<p>&nbsp;</p>
<h2>创建表单</h2>
<p>现在让我们构建表单，构建的表单是一个对象，知道我们想要的所有字段和类型，并能够帮助我们呈现出来。我非常喜欢他。</p>
<p>首先调用createFormBuilder()方法。然后使用add函数去传入表单的username、email和password字段：</p><pre class="crayon-plain-tag">// src/Yoda/UserBundle/Controller/RegisterController.php

public function registerAction()
{
    $form = $this-&gt;createFormBuilder()
        -&gt;add('username', 'text')
        -&gt;add('email', 'text')
        -&gt;add('password', 'password')
        -&gt;getForm()
    ;

    // todo next - render a template
}</pre><p>add函数要传入两个参数一个是字段，一个是字段类型。symfony带有很多内置类型如text，select、date，在symfony官方文档中很容易找到。</p>
<p>我们填写完add后，调用getForm()。</p>
<p>在Twig中呈现表单</p>
<p>我想要去渲染表单，所有我们要把这个form对象传给Twig。使用annotation的@Template渲染页面，并返回form变量给Twig：</p><pre class="crayon-plain-tag">// src/Yoda/UserBundle/Controller/RegisterController.php

/**
 * @Route("/register", name="user_register")
 * @Template
 */
public function registerAction()
{
    $form = $this-&gt;createFormBuilder()
        // ...
        -&gt;getForm()
    ;

    return array('form' =&gt; $form);
}</pre><p>提示：上面的代码有一些错误，下面来解决这些问题。</p>
<p>&nbsp;</p>
<p>让@Template注释可用</p>
<p>我们创建一个Twig模版。根据我们的RegisterController和@Template找到模版路径为Resources/views下的Register目录：</p><pre class="crayon-plain-tag">{# src/Yoda/UserBundle/Resources/views/Register/register.html.twig #}
{% extends '::base.html.twig' %}

{% block stylesheets %}
    {{ parent() }}

    &lt;link rel="stylesheet" href="{{ asset('bundles/user/css/login.css') }}" /&gt;
{% endblock %}

{% block body %}
&lt;section class="login"&gt;
    &lt;article&gt;
        &lt;h1&gt;Register&lt;/h1&gt;

    &lt;/article&gt;
&lt;/section&gt;
{% endblock %}</pre><p>让我们看看浏览器页面的情况。当我们输入一个/register，你会看到一个非常漂亮的页面。哈哈，那是不可能的！我们应该会看到一个巨大的错误。</p>
<p>有时错误是嵌套的，并且最有帮助的很可能在下面。</p>
<p>仔细看看，包含的错误。啊明白了，我们使用了@Template却忘了use声明它。</p><pre class="crayon-plain-tag">// src/Yoda/UserBundle/Controller/RegisterController.php

// ...
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<p><a rel="nofollow" href="http://www.newlifeclan.com/symfony/archives/444">KU案例2之15 注册表单</a>，首发于<a rel="nofollow" href="http://www.newlifeclan.com/symfony">Symfony中文教程</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.newlifeclan.com/symfony/archives/444/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
