最近、Laravel のベンダー ファイルの 1 つを変更して目的の結果を得る必要があるという問題に遭遇しました。そのファイルはvendor/laravel/framework/Illuminate/Routing/CompileRouteCollection.php
.
そのファイル内で、関数を変更する必要があります。
protected function requestWithoutTrailingSlash(Request $request)
{
$trimmedRequest = Request::createFromBase($request);
$parts = explode('?', $request->server->get('REQUEST_URI'), 2);
$trimmedRequest->server->set(
'REQUEST_URI', rtrim($parts[0], '/').(isset($parts[1]) ? '?'.$parts[1] : '')
);
return $trimmedRequest;
}
より具体的には、この部分: rtrim($parts[0], '/')
. ルートの一部を機能させるには、最後の / を削除する必要があります。
内部に独自のカスタム クラスを作成しようとしました: App\Helpers\CompiledRouteCollection.php
。上記の関数をコピーして、独自の変更を加えます。
App\Helpers\CompiledRouteCollection.php
namespace App\Helpers;
use Illuminate\Http\Request;
class CompiledRouteCollection extends \Illuminate\Routing\CompiledRouteCollection
{
protected function requestWithoutTrailingSlash(Request $request)
{
$trimmedRequest = Request::createFromBase($request);
$parts = explode('?', $request->server->get('REQUEST_URI'), 2);
$trimmedRequest->server->set(
'REQUEST_URI', rtrim($parts[0], '').(isset($parts[1]) ? '?'.$parts[1] : '')
);
return $trimmedRequest;
}
}
次に、App\Providers\AppServiceProvider に移動し、登録関数内でこれを実行します。
public function register()
{
$loader = AliasLoader::getInstance();
$loader->alias('App\Helpers\CompiledRouteCollection', 'Illuminate\Routing\CompiledRouteCollection');
}
しかし、何も起こりません。
更新 1
エイリアスを次のように変更しました。
$loader = AliasLoader::getInstance();
$loader->alias('Illuminate\Routing\CompiledRouteCollection', 'App\Helpers\CompiledRouteCollection');
しかし、私の Helper クラスでは、ページにアクセスしようとすると次のエラーが返されます。
Class 'Illuminate\Routing\CompiledRouteCollection' not found
私を助けることに興味を持っている人には、どうもありがとう。さらに情報が必要な場合は、お知らせください。
さらにコンテキストが必要な場合は、ここに完全な背景説明がある laravel/framework に関する問題を開きました