nahid / hookr
php hook 系统用于绑定任何动作中的服务
Requires
- php: >=5.6
This package is auto-updated.
Last update: 2024-09-11 02:48:07 UTC
README
A PHP package for action and filter hook. Its helps to you fire any event with your desire action. Its a similar service as WP action and filter.
安装
请在您的终端中运行以下命令。
composer require nahid/hookr
Laravel 配置
完成安装后,转到 config/app.php
并在 providers 部分添加以下行
Nahid\Hookr\HookrServiceProvider::class,
并在 aliases 部分添加以下行
'Hook' => Nahid\Hookr\Facades\Hook::class,
这样就完成了
用法
使用非常简单。只需遵循说明并将其应用于您的 Laravel 项目。
动作
您想在应用程序中添加额外的控制,而不需要触摸您的代码,请应用动作。假设您有一个博客编辑面板。您想添加其他开发者的额外按钮,而不需要重写您的代码。让我们看看。
<!-- post.blade.php --> <form> <div class="form-group"> <label for="title">Title</label> <input type="email" class="form-control" id="title" placeholder="Email"> </div> <div class="form-group"> <label for="blog">Blog</label> <textarea id="blog" cols="30" rows="10" class="form-control"></textarea> </div> <button type="submit" class="btn btn-default">Publish</button> {{hook_action('buttons')}} </form>
看,这里我们使用了 hook_action()
辅助函数,它注册为名为 buttons
。如果其他开发者想用此表单添加更多按钮,他们将这样做
use Nahid\Hookr\Facades\Hook; class BlogController extends Controller { public function getWritePost() { Hook::bindAction('buttons', function() { echo ' <button class="btn btn-info">Draft</button>'; }, 2); return view('post'); } }
运行此代码后,添加的新按钮将添加到现有按钮中。
您还可以使用此钩子绑定多个动作。Hookr 也支持过滤器。提醒当您在钩子中绑定多个过滤器时,每个过滤器都会从上一个过滤器返回的数据中获取数据。假设您想在博客视图部分添加一个过滤器钩子。
<h1>{{$blog->title}}</h1>
<p>
{{hook_filter('posts', $blog->content)}}
</p>
因此,我们注册了一个名为 'posts' 的过滤器。现在,另一位开发者想要支持博客文章的 markdown。因此,他可以绑定一个解析 markdown 的过滤器。
use Nahid\Hookr\Facades\Hook; class BlogController extends Controller { public function getPosts() { Hook::bindFilter('posts', function($data) { return parse_markdown($data); }, 2); return view('post'); } }
注意:在过滤器中,每个回调函数至少必须有一个参数,该参数表示当前数据
因此,如果您想绑定多个数据,则
use Nahid\Hookr\Facades\Hook; class BlogController extends Controller { public function getPosts() { Hook::bindFilter('posts', function($data) { return parse_markdown($data); }, 2); Hook::bindFilter('posts', function($data) { return parse_bbcode($data); }, 3); return view('post'); } }
现在,这些数据将通过 markdown 和 bbcode 进行解析。看,这里是 bindFilter()
的第二个参数,用于绑定优先级。两者 bindAction()
和 bindFilter()
都有此功能。