💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
{% raw %} # Symfony 表单教程 > 原文: [http://zetcode.com/symfony/form/](http://zetcode.com/symfony/form/) Symfony 表单教程展示了如何在 Symfony 中创建和处理表单。 在本教程中,我们不使用 Symfony 表单构建器。 ## Symfony Symfony 是一组可重用的 PHP 组件和一个用于 Web 项目的 PHP 框架。 Symfony 于 2005 年发布为免费软件。Symfony 的原始作者是 Fabien Potencier。 Symfony 受到 Spring 框架的极大启发。 ## HTML 表单 HTML 表单用于用户与网站或应用之间的交互。 它们允许用户将数据发送到网站。 HTML 表单由一个或多个小部件组成。 这些小部件可以是文本字段,选择框,按钮,复选框或单选按钮。 这些小部件通常与描述其用途的标签配对。 ## Symfony 表单示例 在下面的示例中,我们创建一个 HTML 表单。 表单中的数据由 Symfony 控制器处理。 ```php $ composer create-project symfony/skeleton myform ``` 使用`composer`,我们创建一个新的 Symfony 骨架项目。 ```php $ cd myform ``` 我们转到项目目录。 ```php $ composer req annotations twig ``` 我们安装了两个模块:`annotations`和`twig`。 ```php $ composer require server maker --dev ``` 我们安装开发 Web 服务器和制造商。 ```php $ php bin/console make:controller HomeController ``` 我们创建一个`HomeController`。 `src/Controller/HomeController.php` ```php <?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Routing\Annotation\Route; class HomeController extends AbstractController { /** * @Route("/", name="home") */ public function index() { return $this->render('home/index.html.twig'); } } ``` `HomeController`返回包含 HTML 表单的主页。 `templates/home/index.html.twig` ```php {% extends 'base.html.twig' %} {% block title %}Home page{% endblock %} {% block body %} <section class="ui container"> <form class="ui form" action="message" method="get"> <div class="field"> <label>Name:</label> <input type="text" name="name"> </div> <div class="field"> <label>Message</label> <input type="text" name="message"> </div> <button class="ui button" type="submit">Send</button> </form> </section> {% endblock %} ``` `HomeController`返回包含 HTML 表单的主页。 该表格包含两个输入字段。 这些字段的内容将通过两个请求属性传递到请求对象中。 ```php {% extends 'base.html.twig' %} ``` 该模板继承自`base.html.twig`文件,该文件具有要共享的基本标记。 例如,我们包括语义 UI CSS 框架的文件。 `templates/base.html.twig` ```php <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>{% block title %}Welcome!{% endblock %}</title> <link href="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.css" rel="stylesheet"> </head> <body> {% block body %}{% endblock %} </body> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.4.1/semantic.js"></script> </html> ``` `base.html.twig`模板包含其他模板文件共享的代码。 它定义了将在子模板中替换的块。 ```php $ php bin/console make:controller MessageController ``` 创建了`MessageController`。 `src/Controller/MessageController.php` ```php <?php namespace App\Controller; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\Routing\Annotation\Route; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; class MessageController extends AbstractController { /** * @Route("/message", name="message", methods="GET") */ public function index(Request $request) { $name = $request->query->get("name"); $message = $request->query->get("message"); return $this->render('message/index.html.twig', ["name" => $name, "message" => $message]); } } ``` `MessageController`处理表格。 ```php /** * @Route("/message", name="message", methods="POST") */ ``` `@Route`注解将`message`路径映射到`index()`方法。 `methods`参数定义请求类型。 ```php public function index(Request $request) ``` 我们将`Request`对象注入该方法。 ```php $name = $request->query->get("name"); $message = $request->query->get("message"); ``` 从请求对象中,我们获得两个请求参数。 ```php return $this->render('message/index.html.twig', ["name" => $name, "message" => $message]); ``` 我们渲染`message/index.html.twig`模板。 我们将两个变量传递给模板。 `templates/message/index.html.twig` ```php {% extends 'base.html.twig' %} {% block title %}Show message{% endblock %} {% block body %} {{name}} says: {{message}} {% endblock %} ``` 最后,我们有向用户显示消息的模板文件。 变量以`{{}}`语法显示。 ```php $ php bin/console server:run ``` 我们运行该应用并导航到`localhost:8000`。 在本教程中,我们在 Symfony 应用中创建并处理了一个简单的 HTML 表单。 您可能也对以下相关教程感兴趣: [Symfony 保留表单值教程](/symfony/keepformvalues/), [Symfony 简介](/symfony/intro/), [Symfony 请求教程](/symfony/request/), [Symfony 验证教程](/symfony/validation/) , [Twig 教程](/php/twig/), [Symfony DBAL 教程](/symfony/dbal/)或 [PHP 教程](/lang/php/)。 列出[所有 Symfony 教程](/all/#symfony)。 {% endraw %}