gos / widget
此包已被废弃,不再维护。未建议替代包。
让小部件更容易和可重用!
dev-master / 1.0.x-dev
2014-10-01 15:40 UTC
Requires
- php: >=5.4
- twig/twig: ~1.13
This package is auto-updated.
Last update: 2020-08-17 22:04:38 UTC
README
#Gos Widget 组件#
此项目目前正在开发中,请小心使用。
安装
您需要安装 composer 来安装依赖项。
{ "require": { "gos/widget": "{last stable version}" } }
然后在您的项目根目录下运行命令composer update
如何使用
首先创建一个组件类,例如
<?php namespace Gos\Bundle\I18nBundle\Widget\Locale; use Gos\Component\Widget\Widget; class LocaleSwitcherWidget extends Widget { protected $localeEntityManager; protected $requestStack; /** * Use the constructor to inject your dependencies **/ public function __construct(RequestStack $requestStack, LocaleEntityManager $localeEntityManager) { $this->localeEntityManager = $localeEntityManager; $this->requestStack = $requestStack; } /** * Method imposed by the interface **/ public function build(Array $parameters) { //Here I need the current request (See symfony/HttpFoundation) $request = $this->requestStack->getMasterRequest(); //Set the template to be render $this->setTemplate('widget/locale_switcher.html.twig'); //Data passed to the view $this->setData(array( 'locales' => $this->localeEntityManager->getRepository()->findAllActive(), 'current' => $request->getLocale(), 'route' => array( 'name' => $request->attributes->get('_route'), 'parameters' => $request->attributes->get('_route_params') ) )); } /** * @return mixed|string */ public function getName() { /** * Define the name of the widget to retrieve it in the twig template **/ return 'locale_switcher'; } }
将您的函数注册到 Twig。
use Gos\Component\Widget\WidgetTwigExtension; //Create widget registry instance, who contains your widget $widgetRegistry = new WidgetRegistry(); //Arbitrary depedencies, related to your widget business $localeSwitcherWidget = new LocaleSwitcherWidget($requestStack, $localeEntityManager); //Add your widget on the widgetRegistry $widgetRegistry->addWidget($localeSwitcherWidget); //Add other .... $widgetRegistry->add(...); //Twig engine $twig = new Twig_Environment($loader); //Register the widget twig extension. $twig->addExtension(new WidgetTwigExtension($widgetRegistry));
然后在 twig 模板内部
{{ widget('locale_switcher') }}
手动检索您的组件 $widgetRegistry->getWidget('locale_switcher'); 这将返回您的 LocaleSwitcherWidget 实例
Symfony2 集成
创建一个编译器过程,例如 Acme\DemoBundle\DependencyInjection\Compiler\WidgetCompilerPass
<?php namespace Acme\DemoBundle\DependencyInjection\Compiler; use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Definition; use Symfony\Component\DependencyInjection\Reference; class WidgetCompilerPass implements CompilerPassInterface { public function process(ContainerBuilder $container) { $widgetRegistryDefinition = new Definition('Gos\Component\Widget\WidgetRegistry'); $container->setDefinition('gos.core_bundle.widget.registry', $widgetRegistryDefinition); $widgetTwigExtensionDefinition = new Definition('Gos\Component\Widget\WidgetTwigExtension'); $widgetTwigExtensionDefinition->setArguments(array(new Reference('gos.core_bundle.widget.registry'))); $widgetTwigExtensionDefinition->addTag('twig.extension'); $container->setDefinition('gos.core_bundle.widget_twig_extension', $widgetTwigExtensionDefinition); $taggedServices = $container->findTaggedServiceIds('twig.widget'); foreach ($taggedServices as $id => $tagAttributes) { $widgetRegistryDefinition->addMethodCall('addWidget', array( new Reference($id), )); } } }
在您的包类中注册编译器过程。
<?php namespace Acme\DemoBundle; use Acme\DemoBundle\DependencyInjection\Compiler\WidgetCompilerPass; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\HttpKernel\Bundle\Bundle; class AcmeDemoBundle extends Bundle { public function build(ContainerBuilder $container) { parent::build($container); $container->addCompilerPass(new WidgetCompilerPass()); } }
从现在开始,只需将您的组件注册到 twig 作为服务即可
acme.demo_bundle.locale_switcher.widget: class: Acme\DemoBundle\Widget\LocaleSwitcherWidget arguments: - @request_stack - @gos.i18n_bundle.locale_entity.manager tags: - { name: twig.widget }
现在它可以从模板中访问。
运行测试
需要 PHPUnit 3.5 或更高版本以及 Mock_Object 包。要设置和运行测试,请按照以下步骤操作
- 转到 fixture 的根目录
- 运行: composer install --dev
- 运行: phpunit
许可证
该项目受 MIT 许可证保护,有关更多信息,请参阅项目中的 LICENSE 文件。