nahid/

hookr

php hook 系统用于绑定任何动作中的服务

v1.1.0 2018-07-15 07:01 UTC

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>

Demo

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

运行此代码后,添加的新按钮将添加到现有按钮中。

Demo

您还可以使用此钩子绑定多个动作。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() 都有此功能。