我正在模块化laravel。我决定将所有默认路由,控制器,资源等移至/ app / Modules / Pub。在大多数情况下,它运行良好。但是,我想更改应用程序的默认资源路径。不幸的是,这似乎不是(轻松)可配置的。
所以...使用grep,我能够将resource_path()
函数追踪到/var/www/sigma/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php
我认为有可能在某处覆盖此功能,但这似乎是一个不合标准的技巧,因为该功能仅由以下组成:
app()->resourcePath($path)
再次使用grep,我发现此功能可以在/var/www/sigma/vendor/laravel/framework/src/Illuminate/Foundation/Application.php
这似乎是要更改的事情,因为它没有引用任何配置值,而是对该值进行了硬编码:
return $this->basePath.DIRECTORY_SEPARATOR.'resources'.($path ? DIRECTORY_SEPARATOR.$path : $path);
但是我认为可以安全地手动更改vendor文件夹下的任何内容都是很愚蠢的。显然,我需要在某个地方重写此功能。我不清楚在哪里以及如何做
答案 0 :(得分:1)
您可以在项目的某个地方创建一个类,并扩展默认的\Illuminate\Foundation\Application
类。然后覆盖所需的方法,并使用自定义方法切换在bootstrap/app.php
中实例化的类。
答案 1 :(得分:1)
创建一个新的Application
类来扩展\Illuminate\Foundation\Application
:
<?php
namespace <YOUR NAMESPACE HERE>;
class ApplicationCustom extends \Illuminate\Foundation\Application
{
public function __construct()
{
parent::__construct();
}
/**
* Get the path to the resources directory.
*
* @param string $path
* @return string
*/
public function resourcePath($path = '')
{
// Implement the custom method
}
}
现在,只需将您的bootstrap/app.php
文件更改为使用自定义类:
$app = new YOUR_NAMESPACE\ApplicationCustom(
$_ENV['APP_BASE_PATH'] ?? dirname(__DIR__)
);
希望有帮助。