如何在Laravel内核中注册中间件



我已经创建了这个中间件,我想在多公司应用程序中用于域和子域(myapp.com, comany1.myapp.com)路由:

namespace AppHttpMiddleware;

use AppModelsOrganizationOrgCompany;
use Closure;
class VerifyAppDomain
{
public function handle($request, Closure $next)
{
$request->get('domain_name', $this->getBaseDomain());
$company = OrgCompany::where('subdomain', $subdomain)->firstOrFail();
$request->session()->put('subdomain', $company);
return $next($request);
}
protected function getBaseDomain()
{
return config('myconfig.default_domain_name', 'myapp');
}
}

route/web.php

Route::domain('myapp')->group(['middleware' => ['veryfy_app_domain']], function () {

Route::group(['prefix' => '/' . $defaultDomain], function () {
Route::get('/', function ($id) {
//
});     
});
});

我有所有这些内核:

protected $middlewareGroups = [
'web' => [

],
];
protected $routeMiddleware = [
];
protected $middlewarePriority = [
];

如何编写和注册中间件在Laravel文档中有描述。

对于你的VerifyAppDomain中间件,你应该去app/Http/Kernel.php文件,检查protected $middlewareGroups属性。

我假设您希望为每个请求运行此中间件,因此您可以将其添加到web组。这意味着您不需要在routes.php文件中单独指定此中间件。它将自动应用于所有使用web中间件的路由。

如果你不想让这个自动应用,使用$routeMiddelware属性。

protected $routeMiddleware = [
//.. others
'verify_app_domain' => AppHttpMiddlewareVerifyAppDomain::class,
]

您需要创建一个新的路由中间件并将其添加到$routeMiddleware数组中。然后你可以把它应用到你的路由组中。

protected $routeMiddleware  = [
'verify_app_domain' => AppHttpMiddlewareVerifyAppDomain::class
];

最新更新