该体系结构

编辑该页面

警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 3.4,不再维护。

这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。

该体系结构

你是我的英雄!谁会想到你在这里仍然会在第一个三个部分?你的付出会得到回报。第一个三个部分看起来不太深的体系结构框架。因为它使Symfony框架区别开来ob娱乐下载人群,现在让我们深入架构。

理解的目录结构

Symfony应用程序的目录结构是相当灵活的,但是推荐的结ob娱乐下载构如下:

app /
应用程序配置,模板和翻译。
bin /
(如可执行文件。bin /控制台)。
src /
项目的PHP代码。
测试/
自动测试(例如单元测试)。
var /
生成的文件(缓存、日志等)。
供应商/
第三方依赖关系。
web /
web根目录。

web /目录

web根目录的所有公共和静态文件图像、样式表和JavaScript文件。也是每一个前端控制器(处理所有的文件请求应用程序)的生活,如生产控制器所示:

1 2 3 4 5 6 7 8 9 10
/ /网络/ app.phprequire_once__DIR__“/ . . / var / bootstrap.php.cache”;require_once__DIR__“/ . . / app / AppKernel.php”;使用ob娱乐下载\组件\HttpFoundation\请求;美元内核=AppKernel (“刺激”,);美元请求=请求::createFromGlobals ();美元响应=美元内核- >处理(美元请求);美元响应- >send ();

控制器首次成功应用程序使用一个内核类(AppKernel在这种情况下)。然后,它创建了请求对象使用PHP的全局变量并将其传递给内核。最后一步是将返回的响应内容内核发送回用户。

app /目录

AppKernel类是应用程序的主要入口点配置,因此,它是存储在app /目录中。

这个类必须实现两个方法:

registerBundles ()
必须返回一个数组的运行应用程序所需的所有包,在下一节中解释。
registerContainerConfiguration ()
加载应用程序配置(后面详细讨论)。

通过自动半自动的处理作曲家,这意味着您可以使用任何PHP类没有做任何事!所有依赖项存储在供应商/目录,但这只是一个惯例。你可以随时随地存储它们想要的,你的服务器或本地项目的全球。

理解包系统

本节介绍Symfony的最伟大和最强大的特性之一:包系统。ob娱乐下载

一捆有点像在其他软件插件。所以为什么叫而不是一个插件吗?这是因为一切在Symfony是一个包,从核ob娱乐下载心框架特性来为应用程序编写的代码。

为应用程序编写的所有代码在包被组织。在Syob娱乐下载mfony说话,包是一个结构化的文件集(PHP文件、样式表、javascript、图片…)实现一个功能(一个博客,一个论坛,…),可以与其他开发人员共享。

包在Symfony一等公民。ob娱乐下载这使您可以灵活地使用预构建功能打包在第三方包或分发自己的包。挑选哪些特性使它容易在应用程序中启用和优化他们你所希望的方式。在一天结束的时候,您的应用程序代码是一样的重要的为核心框架本身。

ob娱乐下载Symfony已经包含一个AppBundle你可能用来开始开发您的应用程序。然后,如果你需要将应用程序分割成可重用的组件,您可以创建自己的包。

注册一个包

一个应用程序包中定义的组成registerBundles ()的方法AppKernel类。每个包是一个目录,其中包含一个包的类描述:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21日22日23日
/ / app / AppKernel.php公共函数registerBundles(){美元= (ob娱乐下载Symfony \包\ FrameworkBundle \ FrameworkBundle (),ob娱乐下载Symfony \包\ SecurityBundle \ SecurityBundle (),ob娱乐下载Symfony \包\ TwigBundle \ TwigBundle (),ob娱乐下载Symfony \包\ MonologBundle \ MonologBundle (),ob娱乐下载Symfony \包\ SwiftmailerBundle \ SwiftmailerBundle (),ob娱乐下载Symfony \包\ DoctrineBundle \ DoctrineBundle (),ob娱乐下载Symfony \包\ AsseticBundle \ AsseticBundle (),Sensio赞助\包\ FrameworkExtraBundle \ SensioFrameworkExtraBundle (),AppBundle \ AppBundle ()];如果(in_array (美元- >getEnvironment (), (“开发”,“测试”))){美元[]=ob娱乐下载Symfony \包\ WebProfilerBundle \ WebProfilerBundle ();美元[]=Sensio赞助\包\ DistributionBundle \ SensioDistributionBundle ();美元[]=Sensio赞助\包\ GeneratorBundle \ SensioGeneratorBundle ();}返回美元;}

除了AppBundle已经讨论过,请注意,内核还支持其他bundle Symfony的一部分,如FrameworkBundle DoctrineBundle, SwiftmailerBundle AsseticBundle。ob娱乐下载

配置一个包

每一个包都可以通过配置文件写在YAML定制,XML,或PHP。看看这个示例默认Symfony的配置:ob娱乐下载

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17日18 19 20 21日22日23日24日25日26日27 28 29 30 31 32 33 34 35
# app / config / config.yml进口:- - - - - -{资源:parameters.yml}- - - - - -{资源:security.yml}- - - - - -{资源:services.yml}框架:# esi: ~#翻译:{回退:[' %地区% ']}秘密:“% %的秘密”路由器:资源:' % kernel.project_dir % / app / config / routing.yml 'strict_requirements:“% kernel.debug %”形式:真正的csrf_protection:真正的验证:{enable_annotations:真正的}模板:{发动机:(“树枝”)}default_locale:“%地区%”trusted_proxies:~会话:~#树枝配置枝:调试:“% kernel.debug %”strict_variables:“% kernel.debug %”#迅速梅勒配置swiftmailer:交通:“% mailer_transport %”主持人:“% mailer_host %”用户名:“% mailer_user %”密码:“% mailer_password %”线轴:{类型:内存}#……

每个一级条目框架,嫩枝swiftmailer定义了特定的配置包。例如,框架配置FrameworkBundle而swiftmailer配置SwiftmailerBundle。

每个环境可以覆盖默认的配置提供一个特定的配置文件。例如,dev环境负荷config_dev.yml文件,该文件加载(即主要配置。config.yml),然后修改它添加一些调试工具:

1 2 3 4 5 6 7 8 9 10 11 12 13
# app / config / config_dev.yml进口:- - - - - -{资源:config.yml}框架:路由器:{资源:' % kernel.project_dir % / app / config / routing_dev.yml '}分析器:{only_exceptions:}web_profiler:工具栏:真正的intercept_redirects:#……

扩展包

除了是一种很好的方式来组织代码和配置,包可以扩展另一个包。包继承允许您覆盖任何现有的包以定制其控制器,模板,或它的任何文件。

逻辑文件名称

当你想要引用一个文件从一个包,使用这个符号:@BUNDLE_NAME /道路/ /文件;ob娱乐下载Symfony将解决@BUNDLE_NAME包真正的路径。例如,逻辑路径@AppBundle /控制器/ DefaultController.php将转化为src / AppBundle /控制器/ DefaultController.php,因为Symfonyob娱乐下载知道AppBundle的位置。

逻辑控制器名称

为控制器,您需要使用格式参考行为BUNDLE_NAME: CONTROLLER_NAME: ACTION_NAME。例如,AppBundle:默认值:索引映射到indexAction ()方法从AppBundle \ \ DefaultController控制器类。

扩展包

如果你遵循这些约定,那么您可以使用包继承覆盖文件,控制器或模板。例如,您可以创建一个包- NewBundle覆盖AppBundle并指定。当Symfob娱乐下载ony加载AppBundle:默认值:索引控制器,那么它首先会查找DefaultController在NewBundle类,如果它不存在,那么看起来AppBundle内部。这意味着一个包可以覆盖几乎所有的另一个包的一部分!

现在你明白为什么Symfony如此灵活?ob娱乐下载分享你的包应用程序之间,将它们存储在本地或全球范围内,你的选择。

使用供应商

奇怪的是,应用程序将依赖的第三方库。这些应该存储在供应商/目录中。永远不要碰任何东西在这个目录中,因为它是完全由作曲家。这个目录已经包含Symfony库,SwiftMailer库,教义ORM,ob娱乐下载树枝模板系统和其他一些第三方库和包。

理解缓存和日志

ob娱乐下载Symfony应用程序可以包含多个配置文件中定义的多种格式(YAML、XML、PHP等)。而不是为每个请求,解析,结合所有这些文件Symfony使用它自己的缓存系统。ob娱乐下载事实上,应用程序配置只是解析第一请求然后编译PHP代码存储在var /缓存/目录中。

在开发环境中,Symfony是足够聪明来更新缓存文件当你改变。ob娱乐下载但是在生产环境中,为了加快速度,是你的责任清除缓存,当你更新你的代码或改变其配置。执行这个命令来清除缓存刺激环境:

1
美元php bin /控制台缓存:明确——env =刺激

当开发一个web应用程序,可以在很多方面出错的东西。的日志文件var /日志/目录告诉你一切的请求,帮助您快速解决问题。

使用命令行界面

每个应用程序附带了一个命令行接口工具(bin /控制台),可以帮助您保持您的应用程序。它提供了命令,提高你的生产力,通过自动化繁琐和重复的任务。

运行不带任何参数,了解更多关于它的功能:

1
美元php bin /控制台

——帮助选项可以帮助你发现一个命令的用法:

1
美元php bin /控制台调试:路由器帮助

最终的想法

叫我疯狂,但在阅读这部分,你应该满意移动周围的事物,使Symfony为你工作。ob娱乐下载Symfony的一切都是为了ob娱乐下载你。所以,随时重命名,移动目录在你认为合适的地方。

这就是快速浏览。从测试到发送邮件,你仍然需要学习很多成为一个Symfony的主人。ob娱乐下载现在准备深入研究这些话题吗?看看,去官方ob娱乐下载Symfony的欧宝官网下载app文档并选择你想要的任何话题。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。