Symfony 表单教程展示了如何在 Symfony 中创建和处理表单。 在本教程中,我们不使用 Symfony 表单构建器。
HTML 表单
HTML 表单用于用户与网站或应用之间的交互。 它们允许用户将数据发送到网站。 HTML 表单由一个或多个小部件组成。 这些小部件可以是文本字段,选择框,按钮,复选框或单选按钮。 这些小部件通常与描述其用途的标签配对。
Symfony 表单示例
在下面的示例中,我们创建一个 HTML 表单。 表单中的数据由 Symfony 控制器处理。
$ composer create-project symfony/skeleton myform
使用composer
,我们创建一个新的 Symfony 骨架项目。
$ cd myform
我们转到项目目录。
$ composer req annotations twig
我们安装了两个模块:annotations
和twig
。
$ composer require server maker --dev
我们安装开发 Web 服务器和制造商。
$ php bin/console make:controller HomeController
我们创建一个HomeController
。
src/Controller/HomeController.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
{% 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 表单的主页。 该表格包含两个输入字段。 这些字段的内容将通过两个请求属性传递到请求对象中。
{% extends 'base.html.twig' %}
该模板继承自base.html.twig
文件,该文件具有要共享的基本标记。 例如,我们包括语义 UI CSS 框架的文件。
templates/base.html.twig
<!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 bin/console make:controller MessageController
创建了MessageController
。
src/Controller/MessageController.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");
returnthis->render('message/index.html.twig', ["name" => name,
"message" =>message]);
}
}
MessageController
处理表格。
/**
* @Route("/message", name="message", methods="POST")
*/
@Route
注释将message
路径映射到index()
方法。 methods
参数定义请求类型。
public function index(Request $request)
我们将Request
对象注入该方法。
$name = $request->query->get("name");
$message = $request->query->get("message");
从请求对象中,我们获得两个请求参数。
return this->render('message/index.html.twig', ["name" =>name,
"message" => $message]);
我们渲染message/index.html.twig
模板。 我们将两个变量传递给模板。
templates/message/index.html.twig
{% extends 'base.html.twig' %}
{% block title %}Show message{% endblock %}
{% block body %}
{{name}} says: {{message}}
{% endblock %}
最后,我们有向用户显示消息的模板文件。 变量以{{}}
语法显示。
$ php bin/console server:run
我们运行该应用并导航到localhost:8000
。
在本教程中,我们在 Symfony 应用中创建并处理了一个简单的 HTML 表单。
您可能也对以下相关教程感兴趣: Symfony 保留表单值教程, Symfony 简介, Symfony 请求教程, Symfony 验证教程,Symfony DBAL 教程。