Tyl*_*non 11 php laravel composer-php laravel-6 laravel-7
我最近遇到了一个问题,我需要更改 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;
}
Run Code Online (Sandbox Code Playgroud)
更具体地说,这部分:rtrim($parts[0], '/'). 为了使我的部分路线正常工作,需要删除最后的 / 。
我尝试在里面创建我自己的自定义类:App\Helpers\CompiledRouteCollection.php. 我在其中复制上面列出的函数并进行自己的更改。
应用\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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我进入 App\Providers\AppServiceProvider 并在注册函数内运行它。
public function register()
{
$loader = AliasLoader::getInstance();
$loader->alias('App\Helpers\CompiledRouteCollection', 'Illuminate\Routing\CompiledRouteCollection');
}
Run Code Online (Sandbox Code Playgroud)
但什么也没发生。
更新1
我将别名更改为:
$loader = AliasLoader::getInstance();
$loader->alias('Illuminate\Routing\CompiledRouteCollection', 'App\Helpers\CompiledRouteCollection');
Run Code Online (Sandbox Code Playgroud)
但现在在我的 Helper 类中,当尝试访问任何页面时,它会返回此错误:
Class 'Illuminate\Routing\CompiledRouteCollection' not found
对于任何有兴趣帮助我的人,非常感谢。如果您需要更多信息,请告诉我!
小智 12
编辑app\Providers\AppServiceProvider.php。该方法的第一个参数alias()必须是供应商类,后面是重写类:
public function register()
{
$loader = AliasLoader::getInstance();
$loader->alias(CompileRouteCollection::class, CompiledRouteCollection::class);
}
Run Code Online (Sandbox Code Playgroud)
或者
public function register()
{
$loader = AliasLoader::getInstance();
$loader->alias('Illuminate/Routing/CompileRouteCollection', 'App\Helpers\CompiledRouteCollection');
}
Run Code Online (Sandbox Code Playgroud)
我最终使用 Composer 来 ovveride 文件,因为我之前的方法根本不起作用。这就是我所做的。
首先,在文件的自动加载部分composer.json我添加了以下内容:
"exclude-from-classmap": [
"vendor\\laravel\\framework\\src\\Illuminate\\Routing\\CompiledRouteCollection.php"
],
"psr-4": {
"App\\": "app/",
"Illuminate\\": "app/Overrides/"
},
Run Code Online (Sandbox Code Playgroud)
接下来,我在应用程序文件夹中创建了 Ovverides 文件夹,然后复制该CompiledRouteCollection.php文件并将其粘贴到 Ovverides 文件夹中。
| 归档时间: |
|
| 查看次数: |
18765 次 |
| 最近记录: |