{% raw %}
这是 Symfony 的入门教程。 它展示了 Symfony PHP 框架,并展示了如何创建简单的示例。 本教程介绍了 Symfony 版本 4。
Symfony 是一组可重用的 PHP 组件和一个用于 Web 项目的 PHP 框架。 Symfony 于 2005 年发布为免费软件。Symfony 的原始作者是 Fabien Potencier。 Symfony 受到 Spring 框架的极大启发。
Symfony 使用了几个 PHP 开源项目,例如 Doctrine 对象关系映射库,PDO 数据库抽象层,PHPUnit 测试框架,Twig 模板引擎和 Swift Mailer 电子邮件库。
Symfony 创建了自己的组件,包括 Symfony 依赖注入器和 Symfony YAML 解析器。
为了创建一个 Symfony 4 项目,我们需要 PHP 7(以及相关的库,例如 php-xml 或 php-mcrypt)和composer
。 项目相关性将写入composer.json
文件。
$ composer create-project symfony/skeleton symfirst
使用composer
,我们创建了一个名为first
的新 Symfony 骨架项目。 Symfony 框架等效于微型框架,在微型框架中,我们需要自己安装所有模块。 我们决定要安装什么模块。 这对学习有好处。
$ cd symfirst
不要忘记去项目目录。
作曲家创建了一个 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
带有一些伪值。
接下来,我们将安装一些项目依赖项。
$ composer require server maker --dev
我们安装了开发服务器和 maker 组件,该组件用于生成命令,控制器,表单类或事件订阅者。
$ composer require annotations twig
我们将安装两个附加的 Symfony 模块。 annotations
提供了一种使用注解配置控制器的方法。 twig
允许在 Symfony 应用中使用 Twig 模板引擎。
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 请求,并查看文本响应。
当我们使用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";
return $this->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 输出。
在本教程中,我们介绍了 Symfony 框架。
您可能也对以下相关教程感兴趣: Symfony 表单教程, Symfony 请求教程, Twig 教程, PHP 教程。
{% endraw %}