Symfony是什么?
1. Symfony 是一套组件库
你的第一直觉可能觉得 Symfony
是一个 web
框架,但是从更底层的角度来说,Symfony
首先它是一套组件库,Symfony
组件库包含了高达30多个组件,这些组件不仅 Symfony
自己在用,很多 web
框架比如 Laravel 也在用。
2. Symfony
是一个 web
框架
在众多组件的基础之上,Symfony
构建一个用于 web
开发的框架,框架名字依然是 Symfony
。当前最新版本是4.1.0
。
3. Symfony
是一套设计哲学
Symfony
致力于最大程度的给 web
开发带来便利,不提倡重复造轮子,拥抱和促进职业化、最佳实践、标准化以及可互用的现代PHP程序开发。
综上所述:Symfony
是一个框架,是一组工具,是一整套开发方法。除此之外,Symfony
还有自己的哲学体系和社区。
上手 Symfony
框架
安装
Symfony
官方提供了两种安装方式,1是使用 Symfony installer,2是使用 Composer
。这里推荐使用 Composer
进行安装。
安装最新版本:
1 | composer create-project symfony/framework-standard-edition my_project_name |
目录结构说明
1 | blog/ |
app/config/
,存放用来定义各种环境的配置文件;app/Resources/
,存放程序级别的全部模板和翻译文件。var/cache/
,存放程序生成的缓存;var/logs/
,存放程序生成的日志;var/sessions/
,存放程序生成的session
;tests/AppBundle/
,存放程序的自动测试(如单元测试);vendor/
,这个文件夹是Composer
安装的程序依赖的位置;web/
,存放前端控制器和所有的web assets
资源,例如css、js
和图片。
运行 Symfony
Symfony
利用了PHP内置的web
服务器,使用命令来启动服务器。
1 | php bin/console server:run |
然后,打开浏览器访问http://localhost:8000/
链接,即可看到Symfony
欢迎页.
配置 Symfony
支持多种配置文件
目录app/config
是 Symfony
的配置中心。配置文件格式支持yml
,xml
,.php
格式,推荐使用 yml
格式。简单,可读性强。
支持多环境多配置文件
Symfony
支持在不同的环境下加载不同的配置文件,用于区分开发,测试,生产环境。
配置文件命名约定
加载配置文件时遵循config_xxxenv
格式进行查找。比如开发环境配置文件为config_dev.yml
,路由文件也是如此,routing_dev.yml
为开发环境的路由配置文件。
每个环境对应一个前端控制器,比如开发环境的入口文件为app_dev.php
.
抽取相同配置
开发,测试环境总有些配置是相同的,因此可以放在同一份配置文件中。把这部分公共配置抽取出来。在配置文件中,可使用imports
关键字导入主配置。
模版语言
每个 web
框架都会有自己的模版引擎,用户在 html 文件中渲染数据。Symfony
使用Twig
来作为自己的模版语言。
twig
具体使用方法可参考官网文档,这里不再详细讨论。
路由
Symfony
支持多达四种方式的路由书写格式,分别是注解方式,yml
格式,xml
格式,php
格式。推荐使用注解方式。
1 | // src/AppBundle/Controller/BlogController.php |
数据库
Symfony
使用Doctrine ORM
来连接数据库,但是二者完全解耦,你完全可以不使用 Doctrine
。
数据库配置
数据库连接信息配置在app/config/parameters.yml
中
1 | # app/config/parameters.yml |
使用 Doctrine ORM
要注意一点的是,Doctrine
数据库连接使用的Data mapping
格式,和Laravel Eloquent
不同,前者多个数据表映射文件。
Bundle系统
什么是 Bundle?
Bundle
是Symfony
体系中的一等公民。表示一个独立的功能模块,比如博客模块,论坛模块,在 Symfony
可表示为:BlogBundle
,一个ForumBundle
,每个Bundle
都包含着关乎那个功能的所有东西,包括php
文件,模板,css
,js
文件,tests
,以及其他。每一个功能的子项都存在于bundle中,每一个功能都存在于bundle中。
如何创建 Bundle?
Symfony
标准版内置了超好用的命令,用来帮你创建全功能bundle
。比如创建一个 TestBundle
1 | php bin/console generate:bundle --namespace=Acme/TestBundle |
该命令会生成一个 Bundle
的骨架,包含控制器,模版,路由资源。
注册 Bundle
Bundle
需要注册才能加载使用,在app/AppKernel.php
文件中注册自定义 Bundle
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Symfony\Bundle\DoctrineBundle\DoctrineBundle(),
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new AppBundle\AppBundle(),
);
if (in_array($this->getEnvironment(), array('dev', 'test'))) {
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
}
return $bundles;
更多 Bundle
操作参考官方文档。
总结
以上是 Symfony
的简单使用,可以看出Symfony
是一个可高度定制化的框架,具有很高的扩展性,而且非常易于使用,enjoy it:)