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 输出。
教程目录
- Symfony 请求教程
- Symfony HttpClient 教程
- Symfony Flash 消息
- Symfony 发送邮件
- Symfony 保留表单值
- Symfony @Route 注解
- Symfony 创建路由
- Symfony 控制台命令
- Symfony 上传文件
- Symfony 服务教程
- Symfony 验证教程
- Symfony 翻译教程
- Symfony DBAL 教程
- Symfony 表单教程
- Symfony CSRF 教程
- Symfony Vue 教程
- PHP 教程