Symfony 表单教程

Symfony 表单教程展示了如何在 Symfony 中创建和处理表单。 在本教程中,我们不使用 Symfony 表单构建器。

HTML 表单

HTML 表单用于用户与网站或应用之间的交互。 它们允许用户将数据发送到网站。 HTML 表单由一个或多个小部件组成。 这些小部件可以是文本字段,选择框,按钮,复选框或单选按钮。 这些小部件通常与描述其用途的标签配对。

Symfony 表单示例

在下面的示例中,我们创建一个 HTML 表单。 表单中的数据由 Symfony 控制器处理。

$ composer create-project symfony/skeleton myform

使用composer,我们创建一个新的 Symfony 骨架项目。

$ cd myform

我们转到项目目录。

$ composer req annotations twig

我们安装了两个模块:annotationstwig

$ 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 教程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程