【发布时间】:2020-07-05 14:10:51
【问题描述】:
我最近遇到了一个问题,我需要更改 Laravel 的供应商文件之一以获得所需的结果。
该文件是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 并在 register 函数中运行它。
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 上打开了一个问题,其中包含完整的背景说明 here
【问题讨论】:
标签: php laravel composer-php laravel-6 laravel-7