ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
{% raw %} # Symfony 简介 > 原文: [http://zetcode.com/symfony/intro/](http://zetcode.com/symfony/intro/) 这是 Symfony 的入门教程。 它展示了 Symfony PHP 框架,并展示了如何创建简单的示例。 本教程介绍了 Symfony 版本 4。 ## 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`文件。 ```php $ composer create-project symfony/skeleton symfirst ``` 使用`composer`,我们创建了一个名为`first`的新 Symfony 骨架项目。 Symfony 框架等效于微型框架,在微型框架中,我们需要自己安装所有模块。 我们决定要安装什么模块。 这对学习有好处。 ```php $ cd symfirst ``` 不要忘记去项目目录。 ## Symfony 项目结构 作曲家创建了一个 Symfony 应用结构。 ```php $ 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 项目依赖项 接下来,我们将安装一些项目依赖项。 ```php $ composer require server maker --dev ``` 我们安装了开发服务器和 maker 组件,该组件用于生成命令,控制器,表单类或事件订阅者。 ```php $ composer require annotations twig ``` 我们将安装两个附加的 Symfony 模块。 `annotations`提供了一种使用注解配置控制器的方法。 `twig`允许在 Symfony 应用中使用 Twig 模板引擎。 ## Symfony 创建控制器 Symfony 控制器是一个 PHP 函数,它从`Request`对象读取信息,并创建并返回`Response`对象。 响应可能是 HTML 页面,JSON,XML,文件下载,重定向,404 错误等等。 ```php $ php bin/console make:controller HelloController ``` 使用`console`工具,创建`HelloController`。 在`src/Controller/`目录中创建控制器。 `src/Controller/HelloController.php` ```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`文件中。 ```php /** * @Route("/plain", name="plain") */ public function helloPlain() { ``` 路由是从 URL 路径到控制器方法的映射。 `@Route`注解将`/plain` URL 路径映射到`helloPlain()`函数。 ```php return new Response("Hello there", Response::HTTP_OK, ['content-type' => 'text/plain']); ``` 该函数返回一个`Response`对象。 `Response`对象保存需要从给定请求发送回客户端的所有信息。 构造器最多包含三个参数:响应内容,状态代码和 HTTP 标头数组。 默认状态码为`Response::HTTP_OK`,内容类型为`text/html`。 ```php $ php bin/console server:run ``` 使用`bin/console server:run`命令启动 Web 服务器。 要停止服务器,我们使用`bin/console server:stop`命令。 ```php $ curl localhost:8000/plain Hello there ``` 我们向普通路由发出 GET 请求,并查看文本响应。 ## Symfony 与 Twig 模板 当我们使用`composer require twig`命令时,将 Twig 模板引擎安装到项目目录中。 还创建了一个`templates`目录。 在该目录中,我们放置模板文件。 模板文件具有`html.twig`扩展名。 `src/Controller/HelloController.php` ```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"; return $this->render('hello/index.html.twig', ["message" => $message]); } } ``` 我们已经更新了`HelloController.php`文件; 我们添加了一条新路由。 这次,该函数呈现了一个 Twig 模板。 ```php /** * @Route("/twig", name="twig") */ public function helloTwig(): Response { ``` `helloTwig()`函数映射到`twig`路径。 ```php $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` ```php <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Hello</title> </head> <body> {{ message }} </body> </html> ``` 这是 Twig 模板文件。 ```php {{ message }} ``` `{{ }}`是一种特殊的 Twig 语法,它显示变量的内容。 ```php $ curl localhost:8000/twig <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Hello</title> </head> <body> Hello from Twig </body> </html> ``` 当我们连接到树枝路径时,我们将获得此 HTML 输出。 在本教程中,我们介绍了 Symfony 框架。 您可能也对以下相关教程感兴趣: [Symfony 表单教程](/symfony/form/), [Symfony 请求教程](/symfony/request/), [Twig 教程](/php/twig/), [PHP 教程](/lang/php/)。 列出[所有 Symfony 教程](/all/#symfony)。 {% endraw %}