Symfony2,如何像独立类一样创建一个小部件

use*_*544 1 widget symfony

让我们从基本的东西开始,简单的例子是Yii.它有小部件这样的东西.独立,可配置和可从我们想要的类的任何地方调用.而我想知道symfony2可以有相同的吗?它会是什么?控制器捆绑?动作简单(方法)?带参数的小工具(树枝)?

在Yii中,我们创建类(小部件),独立,描述和使用(通过调用模板).它在symfony2中会如何?

简单的例子'我想使用widget创建菜单导航,它将根据用户角色构造html'.

Tho*_*ire 8

Symfony没有提供这样的功能,但您可以自己制作.他们很少这样做.

我只是承认我们正在谈论可以进行后端工作的小部件(即从数据库获取数据,调用API等).

1 - 可扩展的方式

在Twig中使用render标签,允许您从模板中调用控制器操作.它是可扩展的,因为您可以将esi标签与Varnish一起使用(您也可以实现自己的缓存配置文件).作为奖励,探查器将在时间轴中显示有关特定渲染调用的详细信息(它看起来像整个请求的子集).

2 - 包含模板

包含的模板通过Twig函数调用收集数据.根据经验,它比第一个解决方案快一点,但它不容易扩展.

3 - 渲染自定义的TwigExtension

twig函数将获取数据并调用服务的renderView方法template.如果您打算这样做,您可能想要使用第一种方法.

结论

如果你有一个大型网站,其模块/小部件可以获得大量流量(或"点击"):使用第一个解决方案.

如果您有一个不支持缓存的小型网站:使用第二个解决方案.如果模块/小部件超轻,您将使用此解决方案.

如果您正在考虑第三种解决方案......使用第一种解决方案可能是个好主意.

就个人而言,我总是会尝试使用第一种解决方案并尝试以某种方式提升性能.自从最新版本的Symfony2以来,Twig中的渲染调用得到了显着改善.

希望我的答案能为您提供一些指导.