Laravel 10 路由未定义租赁租户

问题描述 投票:0回答:1

我在使用 Tenancy For Laravel 包时遇到租户路由错误。首先,我用

定义路线

tenant.php

Route::middleware([
    'web',
    InitializeTenancyByDomain::class,
    PreventAccessFromCentralDomains::class,
])->group(function () {
    Route::get('/', function () {
        return 'This is your multi-tenant application. The id of the current tenant is ' . tenant('id');
    });

    Route::get('/login', function () {
        return view('session/login-session');
    })->name('login');

    Route::group(['middleware' => 'auth'], function () {
        Route::get('dashboard', function () {
            return view('applications.dashboard');
        })->name('dashboard');

        // Users
        Route::get('users', [UserController::class, 'index'])->name('users.index');
        Route::get('users/create', [UserController::class, 'create'])->name('users.create');
        Route::post('users', [UserController::class, 'store'])->name('users.store');
        Route::get('users/{id}', [UserController::class, 'show'])->name('users.show');
        Route::get('users/{id}/edit', [UserController::class, 'edit'])->name('users.edit');
        Route::put('users/{id}', [UserController::class, 'update'])->name('users.update');
        Route::delete('users/{id}', [UserController::class, 'destroy'])->name('users.destroy');
    });
...

这会导致错误

Route [users.index] not defined
。但路线已在
artisan route:list

上列出

RouteServiceProvider.php

class RouteServiceProvider extends ServiceProvider
{
    /**
     * The path to the "home" route for your application.
     *
     * This is used by Laravel authentication to redirect users after login.
     *
     * @var string
     */
    public const HOME = '/';

    /**
     * The controller namespace for the application.
     *
     * When present, controller route declarations will automatically be prefixed with this namespace.
     *
     * @var string|null
     */
    // protected $namespace = 'App\\Http\\Controllers';

    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @return void
     */
    public function boot()
    {
        $this->configureRateLimiting();

        $centralDomains = $this->centralDomains();

        $this->routes(function () use ($centralDomains) {
            foreach ($centralDomains as $domain) {
                Route::prefix('api')
                    ->middleware('api')
                    ->namespace($this->namespace)
                    ->domain($domain)
                    ->group(base_path('routes/api.php'));

                Route::middleware('web')
                    ->namespace($this->namespace)
                    ->domain($domain)
                    ->group(base_path('routes/web.php'));
            }
        });
    }

    /**
     * Configure the rate limiters for the application.
     *
     * @return void
     */
    protected function configureRateLimiting()
    {
        RateLimiter::for('api', function (Request $request) {
            return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
        });
    }

    protected function centralDomains(): array
    {
        return config('tenancy.central_domains');
    }
}

作曲家.json

{
    ...
    "require": {
        "php": "^8.1",
        "guzzlehttp/guzzle": "^7.4",
        "laravel/framework": "^11.0",
        "laravel/sanctum": "^4.0",
        "laravel/tinker": "^2.6",
        "stancl/tenancy": "^3.8"
    },
    "require-dev": {
        "spatie/laravel-ignition": "^2.0",
        "fakerphp/faker": "^1.17",
        "laravel/sail": "^1.12",
        "mockery/mockery": "^1.4.2",
        "nunomaduro/collision": "^8.1",
        "phpunit/phpunit": "^10.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-update-cmd": [
            "@php artisan vendor:publish --tag=laravel-assets --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "minimum-stability": "dev",
    "prefer-stable": true
}

如果您需要更多代码,我将通过编辑问题来提供

我已经完成了

php artisan route:clear
php artisan config:clear
php artisan cache:clear
,但没有任何效果。

我已经通过将其更改为资源路由来修复它

Route::resource('users', UserController::class);

我想知道是什么导致了这个问题以及如何解决它,以防我将来需要制作自定义网址

laravel multi-tenant tenancyforlaravel
1个回答
0
投票

我遇到了同样的问题,您可以做的是检查是否有具有相同路线名称的路线。您可以通过运行这两个命令来检查:

 php artisan route: clear
php artisan route:cache
© www.soinside.com 2019 - 2024. All rights reserved.