mprince/larahooks

laravel 行动和过滤器钩子系统,用于绑定任何服务

dev-main 2021-03-07 10:43 UTC

This package is auto-updated.

Last update: 2024-09-24 16:02:50 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

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>

Demo

看,这里我们使用了注册为 buttonsdo_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');
     }
}

运行此代码后,新按钮将与现有按钮一起添加。

Demo

您也可以将多个动作绑定到这个钩子上。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');
       }
  }