xinningsu / laravel-route-trailing-slash
让 Laravel 路由工作得与我们定义的完全一样,包括尾部斜杠。
Requires
- php: >=5.6
- laravel/framework: >=5.4
Requires (Dev)
- php-coveralls/php-coveralls: ^2.1
- phpunit/phpunit: >=5.0
- squizlabs/php_codesniffer: ^3.0
This package is auto-updated.
Last update: 2024-09-18 20:23:09 UTC
README
让 Laravel 路由工作得与我们定义的完全一样,包括尾部斜杠。
背景
目前当我们定义一个路由时,Laravel 将删除所有的尾部斜杠,输出不带任何尾部斜杠的路由 URL。当我们访问带有尾部斜杠的 URL 时,Laravel 也会删除它们。这使得尾部斜杠没有意义,有时相当令人烦恼。
定义路由如下
use App\Http\Controllers\PartnersController; Route::get('/partners/', [PartnersController::class, 'index'])->name('partners');
输出路由 URL
echo route('partners');
当前行为
https://laravel.net.cn/partners
预期行为
https://laravel.net.cn/partners/
分页渲染
使用数据库查询构建器或 LengthAwarePaginator/Paginator
当前行为
https://laravel.net.cn/partners?page=2
预期行为
https://laravel.net.cn/partners/?page=2
安装
composer require xinningsu/laravel-route-trailing-slash
有两个服务提供者,因为路由服务提供者必须在 Laravel HTTP 内核类实例化之前注册,所以我不能通过 Laravel 包自动发现功能使其工作。必须手动添加。
RoutingServiceProvider
在 bootstrap/app.php
中打开,在实例化 app 之后
$app = new Illuminate\Foundation\Application( $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__) );
添加
$app->register(Sulao\LRTS\Routing\RoutingServiceProvider::class);
PaginationServiceProvider
Pagination 服务提供者必须添加到 之后 Laravel 原始 Pagination 服务提供者。
将 Sulao\LRTS\Pagination\PaginationServiceProvider::class
添加到 config/app.php
下的 providers
元素,之后 Illuminate\Pagination\PaginationServiceProvider::class
[ Illuminate\Pagination\PaginationServiceProvider::class, // ... /* * Package Service Providers... */ Sulao\LRTS\Pagination\PaginationServiceProvider::class, // ... ];
这就完成了,现在我们可以生成带有/不带尾部斜杠的 URL,与路由的定义相同。
不匹配行为
目前 Laravel 将删除访问 URL 的尾部斜杠,所以无论 URL 有多少尾部斜杠,都没有区别。
当前行为
现在我们可以自定义不匹配行为,例如如果路由不匹配只是因为尾部斜杠,则中止 404 或 301/302 重定向。
404 行为
在 app/Providers/AppServiceProvider.php
中打开,将以下行添加到 register
方法中
\Sulao\LRTS\Routing\Router::$mismatchAction = 404;
现在行为变为
301/302 行为
在 app/Providers/AppServiceProvider.php
中打开,将以下行添加到 register
方法中
\Sulao\LRTS\Routing\Router::$mismatchAction = 301;
现在行为变为