scylabs / hook-bundle
为 symfony 提供模板和功能钩子
1.0.6
2020-12-31 11:05 UTC
Requires
- php: ^7.2.5
- symfony/flex: ^1.3.1
- symfony/framework-bundle: ^5.1
- symfony/twig-pack: ^1.0
- symfony/yaml: ^5.1
README
symfony 的动态模板钩子系统。
安装
要安装此包,请使用 Composer。
composer require scylabs/hook-bundle
使用方法
操作非常简单。首先,您需要在模板中创建入口点,然后将 PHP 类连接到这些入口点。
我将详细解释。
在 twig 中创建一个连接钩子的入口点
好吧,在接下来的教程中,我们将说“入口点”是一扇门。
您可以使用此包中提供的 TwigExtension。
扩展函数有两个参数。
public function showHook(string $template,string $hookName)
第一个参数是目标模板名称空间。例如:layout.html.twig
第二个参数是钩子名称,用于将 PHP 类连接到这扇门。
您可以在第一个参数中发送 _self。_self 是当前模板名称空间
添加 "raw" 过滤器以解释钩子的 HTML 是很重要的。
{{ showHook(_self,'my_custom_hook')) | raw }}
您不使用 twig 吗?
如果您不使用 twig,可以直接告诉 HooksFounder 服务。
它的工作方式与扩展完全相同,只是它直接返回实例化后的钩子对象数组,而不是钩子内容。
将钩子连接到入口点(门)。
您可以创建无限数量的门和无限数量的钩子来连接这些门。
要将钩子连接到一扇门,您需要创建一个扩展 AbstractHook 类的 PHP 类
这是将钩子连接到门的最低代码。PS:您可以将一个钩子连接到多个门。
<?php namespace App\Hook; use ScyLabs\HookBundle\Model\AbstractHook; class MyHook extends AbstractHook { // name of the doors where the hook will be injected public function getNames(): array { return [ 'my_custom_hook' ]; } // A priority 0 hook will be placed before a priority 1 hook public function getPriority(): int { return 0; } // Hook result. The result are injected in door template. You can also do anything you sant in this function. public function showHook() { // $this->render() controller function equivalent. return $this->render('hook/menu.html.twig',[]); } }
最后一步:将您的钩子目录添加到容器
# config/services.yaml services: App\Hook\: resource: '../src/Hook/*' public: true
完成了。
您还可以在 SymfonyToolbar 的控制器结果中显示任何钩子。
贡献
欢迎拉取请求。对于重大更改,请首先打开一个问题来讨论您想要更改的内容。
请确保根据需要更新测试。