Symfonyob娱乐下载 2.8的新功能:Symfony作为微框架
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
一个microframework是一个术语,用来指“极简的web应用程序框架”。开发人员通常将这个术语与“快速和小型框架”联系在一起,例如Silex.但是您也可以将微框架视为简单且不那么固执己见的名声作品,您可以选择参与与体系结构相关的决策。
由于其灵活的内部架构,从一开始就可以将Symfony用作微框架。ob娱乐下载然而,很少有开发人员以这种方式使用Symfony,因为它并不完全方便ob娱乐下载。
ob娱乐下载Symfony 2.8引入了一个新的微内核特性极大地简化了单文件(或更小的)Symfony应用程序的创建。ob娱乐下载使用Symfony作为微框架的“Hello World”应用程序如下ob娱乐下载所示:
12 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
/ / app / MicroKernel.php使用ob娱乐下载\包\FrameworkBundle\内核\MicroKernelTrait;使用ob娱乐下载\组件\配置\加载程序\LoaderInterface;使用ob娱乐下载\组件\DependencyInjection\ContainerBuilder;使用ob娱乐下载\组件\HttpFoundation\响应;使用ob娱乐下载\组件\HttpKernel\内核;使用ob娱乐下载\组件\路由\RouteCollectionBuilder;类微核扩展内核{使用MicroKernelTrait;公共函数registerBundles(){返回数组(新ob娱乐下载Symfony \包\ FrameworkBundle \ FrameworkBundle ());}受保护的函数configureRoutes(RouteCollectionBuilder$路线){$路线->add (' / ',“内核:indexAction”,“指数”);}受保护的函数configureContainer(ContainerBuilder$c, LoaderInterface$加载程序){$c->loadFromExtension (“框架”, (“秘密”= >“12345”]);}公共函数indexAction(){返回新响应(“Hello World”);}}
一个单一的微核
类启用包,配置它们,定义路由,甚至保存控制器代码。如果你排除强制性的使用
导入和函数
声明,上面的例子正好有4行PHP代码.考虑一下:一个功能齐全的Symfony应用程序只需要4行代码!ob娱乐下载
新的微内核并没有提高Symfony的原始性能,因为它只是改变了路由和包的注册方式。ob娱乐下载但是,由于您只启用了您使用的特性,Symfony标准版的许多特性和包都被禁用了。ob娱乐下载这解释了应用程序性能上的差异:
Symfony微框架最好的一点是,您是在Symfoob娱乐下载ny的肩膀上构建应用程序,这意味着您不会面临微框架的任何常规限制。所有令人难以置信的Symfony特性和ob娱乐下载包都已准备就绪,以备您在应用程序增长时需要它们。
在下面的示例中,使用你好世界
扩展了应用程序,添加了Twig模板支持,Web调试工具栏和Symfony分析器。ob娱乐下载结果仍然是一个单文件应用程序:
12 34 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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
/ / app / MicroKernel.php类微核扩展内核{使用MicroKernelTrait;公共函数registerBundles(){$包=数组(新ob娱乐下载Symfony \包\ FrameworkBundle \ FrameworkBundle (),新ob娱乐下载Symfony \包\ TwigBundle \ TwigBundle ());如果(in_array ($这->getEnvironment (),数组(“开发”,“测试”),真正的)) {$包[] =新ob娱乐下载Symfony \包\ WebProfilerBundle \ WebProfilerBundle ();}返回$包;}受保护的函数configureRoutes(RouteCollectionBuilder$路线){$路线->山(' / _wdt ',$路线->导入(“@WebProfilerBundle /资源/ config /路由/ wdt.xml '));$路线->山(' / _profiler ',$路线->导入(“@WebProfilerBundle /资源/ config /路由/ profiler.xml '));$路线->add (' / ',“内核:indexAction”,“指数”);}受保护的函数configureContainer(ContainerBuilder$c, LoaderInterface$加载程序){//加载bundle的配置$c->loadFromExtension (“框架”, (“秘密”= >“12345”,“分析工具”= >零,“模板”= > [“引擎”= > [“树枝”]]]);$c->loadFromExtension (“web_profiler”, (“工具栏”= >真正的]);//添加配置参数$c->setParameter (“mail_sender”,“user@example.com”);//注册服务$c->注册(“app.markdown”,“AppBundle解析器\ \ \ \ \ \服务减价的);}公共函数indexAction(){返回$这->容器->get (“模板”)->renderResponse (“index.html.twig”);}}
创建单文件应用程序并不是这个微内核的主要目的。真正的用例是创建更小的Symfony应用程ob娱乐下载序,也许只有一个services.yml
文件,一个config.yml
每个环境的文件和在常规控制器类中定义为注释的路由。这是实现这个用例所需的完整代码:
12 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
/ / app / MicroKernel.php/ /……类微核扩展内核{使用MicroKernelTrait;公共函数registerBundles(){返回数组(新Sensio赞助\包\ FrameworkExtraBundle \ SensioFrameworkExtraBundle (),新ob娱乐下载Symfony \包\ FrameworkBundle \ FrameworkBundle (),新ob娱乐下载Symfony \包\ TwigBundle \ TwigBundle (),新AppBundle \ AppBundle ());}受保护的函数configureRoutes(RouteCollectionBuilder$路线){$路线->山(' / ',$路线->导入(“@AppBundle /控制器”,“注释”));}受保护的函数configureContainer(ContainerBuilder$c, LoaderInterface$加载程序){$加载程序->负载(__DIR__.“/ config / config_”.$这->getEnvironment()。“.yml”);$加载程序->负载(__DIR__.“/ config / services.yml”);}}
不要忘记更新前端控制器以使用这个新的微内核,而不是通常的微内核AppKernel
:
1 2 3 4 5 6 7 8 9 10
/ /网络/ app.php使用ob娱乐下载\组件\HttpFoundation\请求;$加载程序=需要__DIR__.“/ . . / app / autoload.php”;require_once__DIR__.“/ . . / app / MicroKernel.php”;$应用程序=新微核(“刺激”,假);$应用程序->loadClassCache ();$应用程序->处理请求(::createFromGlobals ())->send ();
所以如果你要在微框架和全栈框架之间做选择,你有了一种新的可能性。现在你可以这两个同时在同一个应用程序中,不影响任何功能。
评论
一些API端点或其他任务对服务器上的逻辑要求不高。
我有一个Symfoob娱乐下载ny应用程序称为校园折扣,其中我使用请求分离逻辑,以便GET请求被及时交付,而POST请求被发送到队列中稍后处理。根据POST操作,可能会发送一封电子邮件,联系一个API,两者都有或更多。为这些任务安装了许多包。这是我的理解,我可以使用Symfony微框架为GET请求创建一个新的app.php,ob娱乐下载删除与显示内容无关的不必要的包,从而有一个更精简更快的系统,但仍然有另一个app_queue.php用于处理代码的包?
这是我目前为止看到的情况,如果是这样的话,我很兴奋,并不是说我的应用程序由于Blackfire而遭受性能问题:)
无论如何,能够轻松地创建多个内核是MicroKernelTrait的附带好处之一,直到最近我才想到:)。
在决定是否在项目中使用Silex(例如)或Symfony作为微框架时,哪些问题应该指导我们的选择?ob娱乐下载
如果已经设置了这个微内核,并且只需要启动Symfony应用程序的最低要求,那么微型版本如何?ob娱乐下载
Fabien Potencier is a certified Symfony engineer.
Get certified! Online exams available in all countries.
Register NowSilex是一个基于Symfony组件的框架的实现(完成的方式与Symfony完全不同,Symfony是一个全栈ob娱乐下载框架;丘疹,……)。
ob娱乐下载Symfony MicroKernel是一种“只是”不同的配置Symfony全栈框架的方式,但是共享其他所有内容(缓存、包等等)。