slushie/laravel-middleware

此包的最新版本(dev-master)没有可用的许可证信息。

Laravel 4 中间件加载器

dev-master 2013-11-22 16:14 UTC

This package is not auto-updated.

Last update: 2024-09-24 06:41:00 UTC


README

Laravel 4 中间件配置加载器

此包提供了一个简单的配置点,您可以在此处添加中间件到 Laravel 4 请求处理流程。

它通过向应用级别的 App::before()App::after() 事件添加回调来实现。类在 app.middleware 配置键数组中注册(即,middleware 是在 app/config/app.php 文件中定义的数组)。

如何使用

首先,创建一个实现至少一个 Slushie\Middleware\BeforeInterfaceSlushie\Middleware\AfterInterface 的类。然后实现 onBefore($request)onAfter($request, $response) 方法。您可以从一个 onBefore 处理程序中返回一个非 null 值来停止请求处理,就像使用 Laravel 的 App::before() 一样。对于 onAfter() 的返回值将被忽略。

class RedirectBeforeMiddleware implements BeforeInterface {
  public function onBefore($request) {
    if ($request->query('mobile') == 'redirect') {
      return Redirect::to('/mobile');
    }
  }
}

class TimingMiddleware implements BeforeInterface, AfterInterface {
  public function onBefore($request) {
    $this->start_time = time();
  }

  public function onAfter($request, $response) {
    $duration = time() - $this->start_time;
    Log::info("Processing {$request->url()} took {$duration} sec");
  }
}

接下来,配置您的应用以加载 MiddlewareServiceProvider 以及将您自己的中间件类添加到 middleware 配置键。

例如,您的 app/config/app.php 文件可能包括

'providers' => array(
  // .. snip ..

  'Slushie\Middleware\MiddlewareServiceProvider'
),

'middleware' => array(
  'RedirectBeforeMiddleware',
  'TimingMiddleware'
)

工作原理

MiddlewareServiceProvider 使用 IoC 容器从 app.middleware 数组中的所有类创建对象。任何实现 BeforeInterface 的类都用作 before 中间件,任何实现 AfterInterface 的类都用作 after 中间件。当然,一个类可以同时实现这两个接口,以在两个控制点中使用。

理由

尽管 Laravel 提供了通过 App::before()App::after() 方法在每个应用中应用中间件的一种简单方法,但这种方法不利于简单的配置。

这意味着需要将中间件应用于请求的包必须在它们的服务提供程序实例中这样做,这强制用户应用遵循这种行为。

此包为应用开发人员和管理员提供了一种方法,以便在不修改应用代码(如 app/filters.php)的情况下,选择性地启用和禁用中间件。