Symfony 教程

Symfony 是一组可重用的 PHP 组件和一个用于 Web 项目的 PHP 框架。 Symfony 于 2005 年发布为免费软件。Symfony 的原始作者是 Fabien Potencier。 Symfony 受到 Spring 框架的极大启发。

Symfony 使用了几个 PHP 开源项目,例如 Doctrine 对象关系映射库,PDO 数据库抽象层,PHPUnit 测试框架,Twig 模板引擎和 Swift Mailer 电子邮件库。

Symfony 创建了自己的组件,包括 Symfony 依赖注入器和 Symfony YAML 解析器。

设置 Symfony 项目

为了创建一个 Symfony 4 项目,我们需要 PHP 7(以及相关的库,例如 php-xml 或 php-mcrypt)和 composer。 项目相关性将写入composer.json文件。

$ composer create-project symfony/skeleton symfirst

使用composer,我们创建了一个名为 first 的新 Symfony 骨架项目。 Symfony 框架等效于微型框架,在微型框架中,我们需要自己安装所有模块。 我们决定要安装什么模块。 这对学习有好处。

$ cd symfirst

不要忘记去项目目录。

Symfony 项目结构

作曲家创建了一个 Symfony 应用结构。

$ ls -p
bin/           composer.lock  public/  symfony.lock  vendor/
composer.json  config/        src/     var/

bin目录包含console工具,该工具是用于执行各种类型命令的命令行实用程序。 public目录包含 Web 文件。 在 Symfony 骨架应用中,它包含一个文件:index.php,它是一个 Symfony 前端控制器。

第三方依存关系存储在vendor目录中。 config目录包含配置文件。 源代码写在src目录中。 var目录包含临时文件,例如缓存数据。

composer.json中定义了 Composer 依赖项。 composer.lock记录已安装的确切版本,以便以后可以重新安装。 它可以确保每个在项目上工作的人都具有相同的确切版本的库。 symfony.lock文件是 Symfony 配方的正确锁定文件。

还有两个特定的隐藏文件:.env.env.dist.env的内容成为环境变量。 环境变量由各种工具(例如 ORM 库)使用。 .env可能包含敏感或计算机特定的数据; 因此,不应将其提交到存储库。 相反,.env.dist带有一些伪值。

安装 Symfony 项目依赖项

接下来,我们将安装一些项目依赖项。

$ composer require server maker --dev

我们安装了开发服务器和 maker 组件,该组件用于生成命令,控制器,表单类或事件订阅者。

$ composer require annotations twig

我们将安装两个附加的 Symfony 模块。 annotations提供了一种使用注释配置控制器的方法。 twig允许在 Symfony 应用中使用 Twig 模板引擎。

Symfony 创建控制器

Symfony 控制器是一个 PHP 函数,它从Request对象读取信息,并创建并返回Response对象。 响应可能是 HTML 页面,JSON,XML,文件下载,重定向,404 错误等等。

$ php bin/console make:controller HelloController

使用console工具,创建HelloController。 在src/Controller/目录中创建控制器。

src/Controller/HelloController.php

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class HelloController extends AbstractController
{
    /**
     * @Route("/plain", name="plain")
     */
    public function helloPlain(): Response
    {
        return new Response("Hello there", Response::HTTP_OK,
            ['content-type' => 'text/plain']);
    }
}

这是HelloController。 它位于src/Controller/HelloController.php文件中。

/**
 * @Route("/plain", name="plain")
 */
public function helloPlain()
{

路由是从 URL 路径到控制器方法的映射。 @Route注释将/plain URL 路径映射到helloPlain()函数。

return new Response("Hello there",  Response::HTTP_OK,
  ['content-type' => 'text/plain']);

该函数返回一个Response对象。 Response对象保存需要从给定请求发送回客户端的所有信息。 构造函数最多包含三个参数:响应内容,状态代码和 HTTP 标头数组。 默认状态码为Response::HTTP_OK,内容类型为text/html

$ php bin/console server:run

使用bin/console server:run命令启动 Web 服务器。 要停止服务器,我们使用bin/console server:stop命令。

$ curl localhost:8000/plain
Hello there

我们向普通路由发出 GET 请求,并查看文本响应。

Symfony 与 Twig 模板

当我们使用composer require twig命令时,将 Twig 模板引擎安装到项目目录中。 还创建了一个templates目录。 在该目录中,我们放置模板文件。 模板文件具有html.twig扩展名。

src/Controller/HelloController.php

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class HelloController extends AbstractController
{
    /**
     * @Route("/plain", name="plain")
     */
    public function helloPlain(): Response
    {
        return new Response("Hello there", Response::HTTP_OK,
            ['content-type' => 'text/plain']);
    }

    /**
     * @Route("/twig", name="twig")
     */
    public function helloTwig(): Response
    {
        message = "Hello from Twig";
        returnthis->render('hello/index.html.twig', ["message" => $message]);
    }
}

我们已经更新了HelloController.php文件; 我们添加了一条新路由。 这次,该函数呈现了一个 Twig 模板。

/**
 * @Route("/twig", name="twig")
 */
public function helloTwig(): Response
{

helloTwig()功能映射到twig路径。

$message = "Hello from Twig";
return $this->render('hello/index.html.twig', ["message" => $message]);

Twig 渲染位于templates目录中的'hello/index.html.twig文件。 render()方法也接受数据; 在我们的例子中,它是一个消息变量。 模板引擎将数据与 HTML 结构合并。

templates/hello/index.html.twig

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Hello</title>
  </head>
  <body>
    {{ message }}
  </body>
</html>

这是 Twig 模板文件。

{{ message }}

{{ }}是一种特殊的 Twig 语法,它显示变量的内容。

$ curl localhost:8000/twig
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Hello</title>
  </head>
  <body>
    Hello from Twig
  </body>
</html>

当我们连接到树枝路径时,我们将获得此 HTML 输出。

教程目录

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程