我已经创建了这个中间件,我想在多公司应用程序中用于域和子域(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
];