在 Laravel 中注册中间件很简单:
只需在 app/Http/Kernel.php 类的 $middleware 属性中列出中间件类
或者
如果您想将中间件分配给特定的路由,您应该首先在您的 app/Http/Kernel.php 文件中为中间件分配一个简写键
但是如何在 OctoberCMS 插件中做到这一点呢?“路由和初始化”是用来代替Kernel.php
注册中间件的吗?如果没有,插件可以在哪里注册自己的中间件?
在 Laravel 中注册中间件很简单:
只需在 app/Http/Kernel.php 类的 $middleware 属性中列出中间件类
或者
如果您想将中间件分配给特定的路由,您应该首先在您的 app/Http/Kernel.php 文件中为中间件分配一个简写键
但是如何在 OctoberCMS 插件中做到这一点呢?“路由和初始化”是用来代替Kernel.php
注册中间件的吗?如果没有,插件可以在哪里注册自己的中间件?
如文档中所述,您可以在 plugin.php 的 boot 方法中扩展控制器类;
public function boot()
{
// Extend Controller Class
\Cms\Classes\CmsController::extend(function($controller) {
$controller->middleware('Middleware\Path..');
});
// OR Push it directly to the Kernel
// prependMiddleware : Add a new middleware to beginning of the stack.
$this->app['Illuminate\Contracts\Http\Kernel']
->prependMiddleware('Middleware\Path..');
// pushMiddleware : Add a new middleware to end of the stack.
$this->app['Illuminate\Contracts\Http\Kernel']
->pushMiddleware('Middleware\Path..');
}
您也可以将其添加到插件的routes.php
文件中:
Route::group(['prefix' => 'foo'], function () {
Route::get('{slug}', function($slug){
....
})->where('slug', '(.*)?')->middleware('Path\To\Middleware');
});
用这个
Cms\Classes\CmsController::extend(function($controller) {
$controller->middleware('your middleware here');
});
实际上,您可以在插件register
回调上推送中间件,因为它是在中间件发生之前注册的。
class YourPlugin extends PluginBase
{
public function register()
{
$kernel = app()->make('Illuminate\Contracts\Http\Kernel');
$kernel->pushMiddleware(YourMiddleWare::class);
}
}
我在我的插件 routes.php 中使用带有完全限定类名和 Route 组的“中间件”选项让它工作
Route::group(['middleware' => '\Namespace\ABC123\AuthMiddleware'], function(){
您必须列出中间件类
$middleware property
Kernel.php 类。