Symfony2Book10:表单

论坛 期权论坛     
选择匿名的用户   2021-5-22 16:45   682   0
<div class="con editor-preview-side" id="result">
<p>对于Web开发者来说,处理HTML表单是最常见的任务(也是挑战)之一。Symfony2集成了Form组件以使得表单处理更为容易。在本章中,你将从头开始构建一个复杂的表单,并且学会表单库中大部分的重要功能。</p>
<p>Symfony2表单组件是一个独立库,它可以在Symfony2项目之外使用。更多详情参见Github中的<a href="https://github.com/symfony/Form">Symfony2表单组件</a>。</p>
<h2>创建一个简单的表单</h2>
<p>假设你正在构建一个商店应用程序,它需要显示产品。因为你的用户需要编辑和创建产品,你将需要构建一个表单。但在你开始之前,让我们关注一下Product类,该类代表和保存单个产品的数据:</p>
<pre class="blockcode"></pre>
<ol><li>// src/Acme/StoreBundle/Entity/Product.php </li><li>namespace Acme\StoreBundle\Entity; </li><li> </li><li>class Product </li><li>{ </li><li>    public $name; </li><li> </li><li>    protected $price; </li><li> </li><li>    public function getPrice() </li><li>    { </li><li>        return $this-&gt;price; </li><li>    } </li><li> </li><li>    public function setPrice($price) </li><li>    { </li><li>        $this-&gt;price &#61; $price; </li><li>    } </li><li>} </li></ol>
<p>注:如果你要编写这个例子,那么请确保创建和启动AcmeStoreBundle。运行下列命令并按照屏幕的指示进行:</p>
<pre class="blockcode"></pre>
<ol><li>php app/console init:bundle Acme/StoreBundle src/ </li></ol>
<p>这种类通常被称为“简单PHP对象”(POPO),因为到目前为止它并没有与Symfony2或其它任何库相关。它是个非常简单的,要直接为你应用程序解决问题的标准PHP对象(如它在你的应用程序里代表产品)。当然在本章最后,你将可以提供数据到Product实例(通过表单),验证它的数据,并将其持久化到数据库。</p>
<p>截止到现在,你并没有做任何与“表单”相关的操作,你只是简单地创建了一个PHP类,该类将帮助你解决你应用程序中的问题。本章表单构建的目标是允许你的用户与Product对象的数据交互。</p>
<h3>构建表单</h3>
<p>现在你已经创建了一个Product类,下一步就是创建并渲染实际的HTML表单。在Symfony2中,可以通过构建Form对象,然后在模板中渲染来实现。这一切都可以通过一个内部的控制器来实现:</p>
<pre class="blockcode"></pre>
<ol><li>// src/Acme/StoreBundle/Controller/DefaultController.php </li><li>namespace Acme\StoreBundle\Controller; </li><li> </li><li>use Symfony\Bundle\FrameworkBundle\Controller\Controller; </li><li>use Acme\StoreBundle\Entity\Product; </li><li> </li><li>class DefaultController extends Controller </li><li>{ </li><li>    public function indexAction() </li><li>    { </li><li>        // create a product and give it some dummy data for this example </li><li>        $product &#61; new Product(); </li><li>        $product-&gt;name &#61; &#39;Test product&#39;; </li><li>        $product-&gt;setPrice(&#39;50.00&#39;); </li><li> </li><li>        $form &#61; $this-&gt;createFormBuilder($product) </li><li>            -&gt;add(&#39;name&#39;, &#39;text&#39;) </li><li>            -&gt;add(&#39;price&#39;, &#39;money&#39;, array(&#39;currency&#39; &#61;&gt; &#39;USD&#39;)) </li><li>            -&gt;getForm(); </li><li> </li><li>        return $this-&gt;render(&#39;AcmeStoreBundle:Default:index.html.twig&#39;, array( </li><li>            &#39;form&#39; &#61;&gt; $form-&gt;createView(), </li><li>        )); </li><li>    } </li><li>} </li></ol>
<p>稍后,当你为Product对象添加验证时,你将学会配置表单项更简便的方法。该方法将在后面表单项类型猜测一节说明。</p>
<p>在Symfony2中构建一个表单是简便的,因为Form对象是通过“表单构造器”来构造的。表单构造器是一个对象,你可以与之交互用来帮助你容易地创建表单对象。</p>
<p>在本例中,你已经为你表单添加了两个表单项,name和price,它们与Porduct类的name和price属性相对应。表单项name是文本类型,意味着用户可以提交简单本文到该项。price是money类型,这是个一特殊的文本类型,可以用区域货币格式显示并提交。Symfony2附带了许多内建类型,我们稍后讨论(参见内建表单项类型)</p>
<p>现在表单已经创建了,下一步就是去渲染它。这一点可以很容易做到。只需要通过发送特殊的表单“视图”对象到你的模板(参见上面控制器中的$from-&gt;createView()方法),并使用一些表单帮手函数:</p>
<pre class="blockcode"></pre>
<ol><li>{# src/Acme/StoreBundle/Resources/views/Default/index.html.twig #} </li><li> </li><li>&lt;form action&#61;&#34;{<!-- -->{ path(&#39;store_product&#39;) }}&#34; method&#61;&#34;post&#34; {<!-- -->{ form_enctype(form) }}&gt; </li><li>    {<!-- -->{ form_widget(form) }} </li><li> </li><li>    &lt;input type&#61;&#34;submit&#34; /&gt;
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP