Symfonyob娱乐下载 2.7新增:作为一级公民的树枝
警告:这篇文章是关于一个不受支持的Symfony版本。ob娱乐下载有些信息可能已经过时了。阅读最新的Symfony文档ob娱乐下载.
当我开始致力于《Symfony2》时,Twig还不存ob娱乐下载在。总之,为了方便使用PHP作为模板引擎,我创建了ob娱乐下载Symfony模板组件.
后来用起来不太满意PHP作为模板语言,我决定创建一种新的模板语言,嫩枝,基于Python Jinja2语言。Symfob娱乐下载ony2成为第一个在核心中采用非php模板引擎的流行框架。当然,我不知道它是否会成为Symfony开发人员的流行选择,所以Symfony2允许您在应用程序中同时使用PHP和Twig。ob娱乐下载
快进到2015年;很明显,Twig赢得了Symfony2开发人员和许多PHP开发人员的心;ob娱乐下载除了Symfony, Twig现在也被许多开源cms使用。ob娱乐下载
但在Symfony2中,作为一等公民的Twig意味着什么呢?ob娱乐下载为了能够在Symfony中支持PHP和Twig,我们添加了一个抽象层。ob娱乐下载作为开发人员,您主要通过模板
服务;允许一个应用程序使用PHP和Twig。可以想象,这种抽象增加了一层复杂性,并带来了一些性能影响。
对于Syob娱乐下载mfony 3.0,我希望将模板组件提取到一个独立的库中(对于少数使用Symfony PHP的人),但我也希望将Twig置于框架的前端和中心。好消息是大部分工作欧宝平台是合法的吗已经在Symfony 2.7中完成了。ob娱乐下载
在Symfony 2.6中使ob娱乐下载用Twig
在Syob娱乐下载mfony 2.6中,你不能“直接”使用Twig;方法来使用模板子系统模板
服务。此外,由于一些Twig扩展依赖于PHP helper, PHP模板系统总是被加载,即使没有在templating.engines
选择。
因此,你可以编写的渲染Twig模板的最小代码如下所示:
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
<?phprequire_once__DIR__.“/ . . / autoload.php.dist”;使用ob娱乐下载\组件\HttpKernel\内核;使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\配置\加载程序\LoaderInterface;使用ob娱乐下载\包\FrameworkBundle\FrameworkBundle;使用ob娱乐下载\包\TwigBundle\TwigBundle;类SimpleKernel扩展内核{公共函数registerBundles(){返回数组(新FrameworkBundle (),新TwigBundle ());}公共函数registerContainerConfiguration(LoaderInterface$加载程序){$加载程序->负载(函数($容器){$容器->loadFromExtension (“框架”,数组(“秘密”= >“ecret美元”,“路由器”= >数组(“资源”= >”),“模板”= >数组(“引擎”= >数组(“树枝”))));});}}$内核=新SimpleKernel (“刺激”,假);$内核->引导();$c=$内核->getContainer ();$c->get (“request_stack”)->推动(请求::创建(' / '));回声$c->get (“模板”)->呈现(“index.html.twig”);
如您所见,Twig捆绑包已启用,并且templating.engines
设置树枝作为唯一的引擎。
使用没有模板子系统的Twig
从Symfoob娱乐下载ny 2.7开始,模板
配置可以一起删除和树枝可以直接使用:
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
<?phprequire_once__DIR__.“/ . . / autoload.php.dist”;使用ob娱乐下载\组件\HttpKernel\内核;使用ob娱乐下载\组件\HttpFoundation\请求;使用ob娱乐下载\组件\配置\加载程序\LoaderInterface;使用ob娱乐下载\包\FrameworkBundle\FrameworkBundle;使用ob娱乐下载\包\TwigBundle\TwigBundle;类SimpleKernel扩展内核{公共函数registerBundles(){返回数组(新FrameworkBundle (),新TwigBundle ());}公共函数registerContainerConfiguration(LoaderInterface$加载程序){$加载程序->负载(函数($容器){$容器->loadFromExtension (“框架”,数组(“秘密”= >“ecret美元”));});}}$内核=新SimpleKernel (“刺激”,假);$内核->引导();$c=$内核->getContainer ();$c->get (“request_stack”)->推动(请求::创建(' / '));回声$c->get (“树枝”)->呈现(“index.html.twig”);
直接使用Twig有一些缺点:你不能使用一些基本的控制器类快捷方式(比如呈现()
或renderResponse ()
), web分析器不再显示渲染模板所花费的时间,“@bundle”符号在引用模板时不能使用,以及其他一些较小的事情。幸运的是,所有这些问题都将在未来几周内得到解决。
性能如何?
不调用抽象层简化了你必须理解的代码,它允许轻松地使用所有原生Twig功能。但还有一个不错的副作用。您可能知道,在PHP中加载代码(即使带有操作码缓存)会导致性能损失;你的代码越少,你的应用程序的性能就越好。
直接使用Twig,而不启用模板子系统,可以获得很好的性能提升,如Blackfire.io所示概要文件比较.
如果查看“metrics”选项卡,您将看到为这个简单示例加载的类的数量从103
来55
;这是减少48节课加载新代码。不加载类也意味着更少的内存消耗:它会通过30%.
此外,在调用图中,你不会看到各种默认的Twig扩展的任何节点,因为加载它们所需的时间可以忽略不计……除了一个:Fragment扩展。在分析代码时很容易发现这个异常,在深入研究了这个问题之后,我对惰性加载进行了更改片段渲染器.这也会给Symfony 2.7带来不错的性能提升。ob娱乐下载
评论
评论截止。
为了确保评论保持相关性,旧帖子将被关闭。
这是错误的。这个符号是Twig原生符号(在Symfony的早期版本中,不可能使用它的情况实际上是在启用多个引擎的模板引擎时使用)ob娱乐下载
这个问题可能与Bundle:Foo:test.html有关。twig符号,而不是@Bundle符号
@Hugo在现实世界中,内存消耗增益会小得多(因为一个典型的Symfony请求可能会使用比这个小片段多得多的东西)ob娱乐下载
感谢Fabien和Symfony团队。ob娱乐下载
斯科特
Grégoire Pineau is a certified Symfony engineer and a certified Twig designer.
Get certified! Online exams available in all countries.
Register NowSudo旋律自我更新#一定要使用最后的旋律发布
Melody run -vvv 5a807d97c77c496e871a your name-here
;)