mprince / larahooks
laravel 行动和过滤器钩子系统,用于绑定任何服务
dev-main
2021-03-07 10:43 UTC
Requires
- php: >=5.6
This package is auto-updated.
Last update: 2024-09-24 16:02:50 UTC
README
Larahooks
Laravel 8 包,用于行动和过滤器钩子。它可以帮助你触发任何事件,并执行你想要的操作。它与 WP 行动和过滤器类似。
灵感来源于 nahid
安装
在终端中输入以下命令。
composer require mprince/larahooks
这样就完成了
用法
使用非常简单。只需按照说明操作,并将其应用于您的 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> {{do_action('buttons')}} </form>
看,这里我们使用了注册为 buttons
的 do_action()
辅助函数。如果其他开发者想要在这个表单中添加更多按钮,他们会这样做
use Mprince\Larahooks\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'); } }
运行此代码后,新按钮将与现有按钮一起添加。
您也可以将多个动作绑定到这个钩子上。Larahooks 也支持过滤器。请注意,当您将多个过滤器绑定到一个钩子上时,每个过滤器都会从上一个过滤器返回的数据中获取数据。假设您想在博客视图部分添加一个过滤器钩子。
<h1>{{$blog->title}}</h1>
<p>
{{apply_filters('posts', $blog->content)}}
</p>
因此,我们注册了一个名为 'posts' 的过滤器。现在,另一位开发者想支持博客文章的 markdown。因此,他可以绑定一个解析 markdown 的过滤器。
use Mprince\Larahooks\Facades\Hook; class BlogController extends Controller { public function getPosts() { hook()->bindFilter('posts', function($data) { return parse_markdown($data); }, 2); return view('post'); } }
注意:在过滤器中,每个回调函数都必须至少有一个参数,该参数表示当前数据
因此,如果您想绑定多个数据,则
use Mprince\Larahooks\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()
的第二个参数,它是绑定优先级。这两个功能都具有此功能。
Blade 视图
您可以通过 bindAction()
和 bindFilter()
显示 blade 文件。
use Mprince\Larahooks\Facades\Hook; class BlogController extends Controller { public function index() { hook()->bindFilter('posts', function($data) { return view('index'); }, 2); return view('post'); } }
压缩数据
use Mprince\Larahooks\Facades\Hook; use App\Models\User; class BlogController extends Controller { public function index() { hook()->bindFilter('posts', function($data) { $user = User::all(); return view('index', compact('user')); }, 1); return view('post'); } }