elendev / widget-bundle
提供简单的小部件管理
0.4.1
2017-03-13 12:49 UTC
Requires
- symfony/framework-bundle: ~2.1|~3.0
Requires (Dev)
README
ElendevWidgetBundle 允许将小部件(独立HTML代码)添加到现有模板中,而不依赖任何其他东西。
安装
ElendevWidgetBundle 通过composer提供。您只需在您的composer.json中添加elendev/widget-bundle即可。
配置
elendev_widget:
enable_annotations: true # false : disable annotation support
scan_services: true # false : don't check annotations on services
scan_widget_directory: true # false : don't scan Widget directory
widget_directory: 'Widget' # name of the widget directory at bundle's root
hinclude:
force: none # Force use of hinclude
# none : use widgets to load synchronous widget, widgets_async to load them asynchronously
# enabled : force widgets method to load asynchronously using hinclude
# disabled : force widgets_asynch method to load synchronously
注册新的小部件
小部件是一个返回简单HTML代码的服务方法。您只需给服务方法标记
tags:
- {name: elendev.widget, tag: your_tagname, method: method_name, priority: optional_integer_priority}
还提供了注解,您可以在widget_directory
子目录中注解任何服务方法或类的任何方法。
namespace Acme\DemoBundle\Widget;
use Elendev\WidgetBundle\Annotation\Widget;
class MyTestWidget {
/**
* @Widget(tag="main", priority=99)
*/
public function myYoupiWidget(){
return "This is a simple widget";
}
}
小部件的默认值是标签值。widget_directory
子目录中的小部件作为服务实例化,并支持ContainerAwareInterface
接口(容器会自动注入)。
使用Twig的扩展widget方法
要包含小部件在视图中,只需调用此方法
{{ widgets('your_tagname') }}
可以使用hinclude
{{ widgets_async('your_tagname') }}
请注意:只能传递标量参数给widgets_async方法。要启用hinclude,请参阅symfony的文档:https://symfony.com.cn/doc/current/book/templating.html#asynchronous-content-with-hinclude-js。
您可以在项目中添加多个小部件位置,指定它们的tagname
。
某些小部件位置可以提供参数。您可以在widgets
调用中添加所需数量的参数,它们将被传递给小部件。
#services.yml
services:
my_service:
class: Some/Class/MyWidgets
tags:
- {name: elendev.widget, method: memberDatas, tag: member_profile}
{# Template twig #}
{{ widgets('member_profile', member) }}
//PHP code
class MyWidgets{
public function memberDatas(Member $member){
return 'some templates';
}
}