Symfony4中文文档: 建立你的第一个Symfony页面

建立你的第一个Symfony页面

建立一个新页面 - 不管是HTML页面仍是JSON端点 - 分为两步:php

  1. 建立一个路由: 路由(route)是一个指向你的页面URL(好比/about), 同时它映射到一个控制器.
  2. 建立一个控制器: 控制器(controller)是你为了构造页面而写的功能. 获取传入的request请求信息并用它建立一个Symfony Response对象, 该对象能够包含HTML内容, JSON字符串甚至是图像或PDF等二进制文件.

建立一个页面: 路由和控制器

在开始以前, 请确保你已经阅读安装和配置Symfony章节, 并能够在浏览器中访问你的Symfony应用程序.

假设你要新建一个 /lucky/number 页面, 用于生成一个随机的幸运数字而且输出它. 为此,要先建立一个控制器类和控制器方法:html

<?php
// src/Controller/LuckyController.php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;

class LuckyController
{
    public function number()
    {
        $number = random_int(0, 100);

        return new Response(
            '<html><body>Lucky number: '.$number.'</body></html>'
        );
    }
}

如今, 你须要将此控制器功能与公共URL(例如: /lucky/number)相关联, 以便在用户访问此连接时执行 number() 方法. 经过在 config/routes.yaml 文件中建立路由来定义此关联:git

# config/routes.yaml

# the "app_lucky_number" route name is not important yet
app_lucky_number:
    path: /lucky/number
    controller: App\Controller\LuckyController::number

就这样, 若是你正在使用Symfony Web服务, 能够尝试访问下:数据库

http://localhost:8000/lucky/number

若是你看到幸运号码被输出到浏览器, 那么恭喜! 可是在你开始玩彩票以前, 先要了解它是如何运行的. 还记得建立页面的两个步骤吗?api

  1. 建立一个路由: 在 config/routes.yaml 文件中, 路由定义了URL到页面的映射和要调用的控制器. 在本章节中你将会了解有关路由的更多信息, 包括如何建立变量URL.
  2. 建立一个控制器: 这是一个构建并最终返回一个Response对象的功能, 在本章节中你将会了解有关控制器的更多信息, 包括如何返回JSON响应.

要更快的建立控制器, 可让 Symfony 来生成:浏览器

$ php bin/console make:controller

Annotation 路由

除了YAML, Symfony 容许使用annotation来定义路由. 为此, 请安装annotation包:缓存

$ composer require annotations

你能够直接在控制器上方添加路由:app

<?php

// src/Controller/LuckyController.php

// ...
+ use Symfony\Component\Routing\Annotation\Route;

class LuckyController
{
+     /**
+      * @Route("/lucky/number")
+      */
    public function number()
    {
        // this looks exactly the same
    }
}

就这样, 页面 - http://localhost/lucky/number 将像之前同样工做! Annotations 是配置路由的推荐方法.composer

使用 Symfony Flex 自动安装『食谱』

你可能没有注意到, 但当你运行 composer require annotations 时, 发生了两件特别的事情, 这要归功于一个名为Flex的强大的Componser插件.dom

首先, annotations 不是一个真正的包名: 它是Flex解析为 sensio/framework-extra-bundle 的别名.

其次, 此软件包被下载以后, Flex执行一个『食谱』, 这是一组自动指令, 告诉Symfony如何继承外部软件包. Flex『食谱』适用于许多软件包, 而且可以作不少事情, 例如增长配置文件, 建立目录, 更新.gitignore以及向.env文件添加新配置. Flex自动安装软件包, 以便于你能专一于编码.

你能够经过阅读 "Using Symfony Flex to Manage Symfony Applications"来了解有关Flex的更多信息. 但这不是必须的: 当你添加包时, Flex会在后台自动运行.

bin/console 命令

你的项目已经集成一个强大的调试工具: bin/console 命令. 尝试运行一下:

$ php bin/console

你应该能够看到一组命令列表, 能够为你提供调试信息, 帮助生成代码, 生成数据库迁移等. 当你安装更多软件包时, 你将看到更多命令.

要获取你的系统中全部路由列表, 可使用 debug:router 命令:

php bin/console debug:router

你能够在最顶端看到你的 app_lucky_number 路由:

Name Method Scheme Host Path
app_lucky_apinumber ANY ANY ANY /lucky/number

你还将在 app_lucky_number 以后看到调试路由 - 更多信息将在下一节中介绍.

Web调试工具栏: Debugging Dream

Web Debug Toolbar 是Symfony的杀手级工具之一: 在开发过程当中大量调试信息输出在页面底部,便于调试. 安装 symfony/profiler-pack 便可开箱即用.

安装好后, 页面底部会出现一个黑色工具条. 你将了解更多有关它所包含的全部信息, 并可自由尝试: 鼠标悬停或点击工具条上不一样图标便可获取有关路由, 性能, 日志记录等信息.

渲染模板

若是要从控制器返回HTML, 则可能须要渲染模板. 幸亏, Symfony带有Twig: 一个简单,强大而且很是有趣的模板语言.

确保 LuckyController 继承了Symfony的基础 AbstractController 类:

// src/Controller/LuckyController.php

// ...
+ use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

- class LuckyController
+ class LuckyController extends AbstractController
{
    // ...
}

如今, 使用简便的 render() 函数来渲染模板. 传递一个数字变量, 以便于你能够在Twig中使用它:

// src/Controller/LuckyController.php

// ...
class LuckyController extends AbstractController
{
    /**
     * @Route("/lucky/number")
     */
    public function number()
    {
        $number = random_int(0, 100);

        return $this->render('lucky/number.html.twig', [
            'number' => $number,
        ]);
    }
}

模板文件存在于 templates/ 目录中, 该目录是在安装Twig时自动建立的. 建立一个新目录 templates/lucky , 在新目录中建立模板文件 number.html.twig, 写入内容:

{# templates/lucky/number.html.twig #}

<h1>Your lucky number is {{ number }}</h1>

{{number}} 语法在Twig中用来打印变量. 刷新浏览器以获取新的幸运数字.

http://localhost:8000/lucky/number

如今你可能担忧Web Debug工具去了哪里: 那是由于当前模板中没有 </body> 标签. 你能够本身添加body元素, 或者扩展 base.html.twig , 它包含全部默认的HTML元素.

建立和使用模板章节中, 你将了解有关Twig的全部信息: 如何渲染, 渲染其余模板以及利用其强大的布局继承系统.

查看项目结构

好消息! 你已经在项目中最重要的目录中工做:

config/

配置路由, 服务和包

src/

全部PHP代码都在此处.

templates/

全部Twig模板文件都在此处.

大多数状况下, 你将在 src/, templates/config/ 中工做. 当你继续阅读时, 你将学习在每一个目录中能够作些什么.

那么项目中的其余目录呢?

bin/

著名的 `bin/console` 文件存在于此 (以及其余不过重要的可执行文件).

var/

这里存储项目自动建立的文件, 如缓存文件 ( `var/cache/` ) 和 ( `var/log` ) .

vendor/

第三方 (即"vendor") 类库都在这里! 这些是经过Composer包管理器下载的.

public/

这是项目的文档根目录: 你能够在此目录放置任何可公开访问的文件.

当你安装新软件包时, 将在须要时自动建立新目录.

相关文章
相关标签/搜索