slushie / laravel-middleware
Laravel 4 中间件加载器
Requires
- php: >=5.3.0
- illuminate/support: ~4.0
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\BeforeInterface
或 Slushie\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
)的情况下,选择性地启用和禁用中间件。