Php 多实体类型的Laravel子域路由

Php 多实体类型的Laravel子域路由,php,laravel,eloquent,Php,Laravel,Eloquent,我有一个项目,其中有多个子域。 例如,我有一个学生子域,它指向一个学生控制器,它如下所示: Route::domain('students.domain.test')->group(function () { Route::get('/', function () { return "done reaching the students page"; }); }); Route::group([ 'middleware' => [

我有一个项目,其中有多个子域。 例如,我有一个学生子域,它指向一个学生控制器,它如下所示:

Route::domain('students.domain.test')->group(function () {
    Route::get('/', function () {
        return "done reaching the students page";
    });
});
Route::group([
'middleware' => ['type:journal']
],function () {
    Route::get('/', function(){
        return 'journals logic goes here';
    });

});
    public function handle($request, Closure $next, ...$types)
{
    $currentEntity = app('current_entity');
    if ($currentEntity->entityType()->whereIn('title->en', $types)->exists()) {
        abort(404, 'Sorry, Request Not Found');
    }
    return $next($request);
}
Route::group([
'middleware' => ['except_entity:journal']
], function(){
    Route::get('/', function(){
    return 'default pages when journals fails';
})->name('index');
第二种类型的域是“domain.test”和我在请求级别检查的任何子域,也可以

Route::get('/', [HomeController::class, 'index'])->name('index');
但是在第二类域之前,我想为数据库中的特定类型的实体创建子域

Route::domain('{someTypes}.domain.test')
->group(function () {
    Route::get('/', function () {
        return "done reaching SomeTypes Page";
    });
});
我的实体表有以下属性:Id、Title、Type“我想检查其类型是否为5”

我尝试使用中间件:

    public function handle($request, Closure $next, ...$types)
{
    $currentEntity = app('current_entity');
    if ($currentEntity->entityType()->whereIn('title->en', $types)->exists()) {
        return $next($request);
    }
    abort(404, 'Sorry, Request Not Found');
}
我将其应用于我的路线,如下所示:

Route::domain('students.domain.test')->group(function () {
    Route::get('/', function () {
        return "done reaching the students page";
    });
});
Route::group([
'middleware' => ['type:journal']
],function () {
    Route::get('/', function(){
        return 'journals logic goes here';
    });

});
    public function handle($request, Closure $next, ...$types)
{
    $currentEntity = app('current_entity');
    if ($currentEntity->entityType()->whereIn('title->en', $types)->exists()) {
        abort(404, 'Sorry, Request Not Found');
    }
    return $next($request);
}
Route::group([
'middleware' => ['except_entity:journal']
], function(){
    Route::get('/', function(){
    return 'default pages when journals fails';
})->name('index');
我还有另一个中间件可以忽略如下类型:

Route::domain('students.domain.test')->group(function () {
    Route::get('/', function () {
        return "done reaching the students page";
    });
});
Route::group([
'middleware' => ['type:journal']
],function () {
    Route::get('/', function(){
        return 'journals logic goes here';
    });

});
    public function handle($request, Closure $next, ...$types)
{
    $currentEntity = app('current_entity');
    if ($currentEntity->entityType()->whereIn('title->en', $types)->exists()) {
        abort(404, 'Sorry, Request Not Found');
    }
    return $next($request);
}
Route::group([
'middleware' => ['except_entity:journal']
], function(){
    Route::get('/', function(){
    return 'default pages when journals fails';
})->name('index');
并将其应用于其他路线,如下所示:

Route::domain('students.domain.test')->group(function () {
    Route::get('/', function () {
        return "done reaching the students page";
    });
});
Route::group([
'middleware' => ['type:journal']
],function () {
    Route::get('/', function(){
        return 'journals logic goes here';
    });

});
    public function handle($request, Closure $next, ...$types)
{
    $currentEntity = app('current_entity');
    if ($currentEntity->entityType()->whereIn('title->en', $types)->exists()) {
        abort(404, 'Sorry, Request Not Found');
    }
    return $next($request);
}
Route::group([
'middleware' => ['except_entity:journal']
], function(){
    Route::get('/', function(){
    return 'default pages when journals fails';
})->name('index');

我希望我想要达到的目标是明确的。

首先,你需要检查一下你使用的是什么版本的laravel

您需要使用中间件。我认为,使用Laravel6、7或8编码的方法有点不同


你能给我们更多关于你的代码的信息吗,这样我们可以更容易地帮助你吗?

你在这里遇到了什么问题?我想检查“someType”是一个实体的id,它的类型是5而不是任何其他类型,然后创建一个中间件并执行该检查我有一个中间件,但它在第一个类型上中止了404,如果类型未通过检查,我可以让它将结果传递到另一个路由吗?我认为您应该尝试使用中间件,如果不工作,请询问
,以便
我使用laravel 7。我编辑了这篇文章你可以查看