我在使用 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);
我想知道是什么导致了这个问题以及如何解决它,以防我将来需要制作自定义网址
我遇到了同样的问题,您可以做的是检查是否有具有相同路线名称的路线。您可以通过运行这两个命令来检查:
php artisan route: clear
php artisan route:cache