davestewart / pathconfig
PHP框架的路径配置库
Requires
- php: >=5.3.0
Suggests
- laravel/framework: This package requires Laravel 5
This package is not auto-updated.
Last update: 2024-09-14 17:53:39 UTC
README
PathConfig 允许为您的应用程序路径提供一个配置点。
该库的主要目的是允许重新组织应用程序,绕过框架现有的限制。
下面的动画演示了将 Laravel 5 项目中的较少使用的组件重新组织到“支持”文件夹中
该库提供辅助类和应用程序类存根,以简化此过程。
特性
- 项目路径的单个根级别配置文件
- 命名根相对路径,例如
config
或storage
- 能够以编程方式添加额外路径
- 与现有框架集成(目前支持 Lumen 和 Laravel)
配置
在项目根目录中创建一个 paths.php
文件。
从它返回一个包含所需键/路径对的单一数组
return array ( 'app' => 'app', 'config' => 'resources/config', 'storage' => 'storage', );
所有路径都应该是相对于项目根目录的,该目录将单独确定。
Laravel 5.x 和 Lumen 5.x 的示例配置文件在 config/
文件夹中可用。
对于无配置实例化,确保配置文件保留在项目的根目录中!
用法
使用 PathConfig 有两种方式
- 独立使用
- 与 Laravel 或 Lumen 一起使用
独立使用
如下加载 PathConfig 实例
$paths = pathconfig\PathConfig::instance()->load();
如果尚未设置 basepath()
选项(默认),则库将从其 vendor
文件夹开始向上搜索,并查找 paths.php
配置文件。
一旦加载完成,您就可以根据需要调用 get()
方法。
与 Laravel 或 Lumen 一起使用
假设您已经 复制并编辑了您的配置文件,您需要执行以下四个步骤来重构您的应用程序
- 替换默认的应用程序实例
- 物理移动框架文件夹
- 更新一些关键路径引用
- 导出 Composer 的自动加载
首先,您需要用实现新集中路径功能并覆盖现有路径相关方法的 pathconfig
版本的现有 Illuminate
应用程序类进行替换。
在您的应用程序的 bootstrap/app.php
(或等效)文件中,替换现有的 $app
实例化如下
$app = new pathconfig\apps\Laravel50();
请确保使用您框架和版本的适当类。
其次,确保您物理上 移动 硬盘上的文件夹,反映配置文件中的路径。
第三,更新和修改可能引用您已移动文件夹的所有框架文件
Laravel
Lumen
最后,使用 composer dump-autoload
导出 Composer 的自动加载。
此时,您应该能够重新加载您的应用程序,并且一切都应该正常工作。
第一次运行时它不起作用时的调试
如果您的应用程序出错,请仔细检查您的路径编辑(目前这一切都关于路径编辑!)并确保它们是正确的
- 运行
composer dump-autoload
时出错 - 重新检查您的 comsposer.json 文件 - 浏览器中的错误 - 阅读错误消息,找到文件,并修复路径
- 您是否在使用 Lumen 或 Laravel 的含糊不清的
../
片段连接中犯了愚蠢的错误? - 您现在引用的文件夹真的移动了吗!?
获取和设置路径
现在您已经启动并运行,您可以从配置中提取路径。
使用get()
方法直接从实例获取路径
$config = $paths->get('config'); // /home/vagrant/code/project.app/support/config/
要附加额外的文件路径(这也会解析任何../引用),将其作为第二个参数添加
$file = $paths->get('config', 'path/to/file.php'); // /home/vagrant/code/project.app/support/config/path/to/file.php
传递单个非现有路径键的参数将从基本文件夹解析路径
$file = $paths->get('path/to/file/from/root.php'); // /home/vagrant/code/project.app/path/to/file/from/root.php
不传递任何参数(或单词base
)将返回基本文件夹
$root = $paths->get(); // /home/vagrant/code/project.app/
要获取所有路径,请调用all()
方法
$root = $paths->all(); // Array // ( // [base] => /home/vagrant/code/project.app // [app] => /home/vagrant/code/project.app/app // [public] => /home/vagrant/code/project.app/public // [routes.php] => /home/vagrant/code/project.app/app/Http/routes.php // )
传递false
以返回相同的数组,但包含相对路径。
使用set()
设置新的路径
$paths->set('plugins', 'support/plugins/');
选项
有各种选项可以控制路径的加载和转换。
默认情况下,它们设置为模仿PHP的realpath()
,其输出取决于其运行的平台。
设置替代基本路径
要设置新的基本路径
$paths->option('base', $value);
请注意,基本路径只能在加载路径之前设置。
转换斜杠
要自动转换斜杠(默认开启)
$paths->option('convertslashes', true);
有3个选项,包括转换基本路径、配置路径和生成的路径
- true:将所有斜杠转换为平台类型
- false:不转换任何斜杠
3: 'auto' 将所有斜杠转换为配置文件中找到的第一个斜杠类型
删除尾部文件夹斜杠
$paths->option('trimslashes', false);
请注意,在加载路径之后,所有与斜杠相关的选项都不会生效。
测试路径是否存在
默认情况下,库不会测试传入的路径以查看它们是否以PHP的realpath的方式存在。要模拟此行为,请调用
$paths->option('testpaths', true);
允许路径被多次设置
库只允许您设置路径一次,但您可以通过将mutable
选项设置为false来覆盖此限制
$paths->option('mutable', 'false');
附加功能
将get()方法作为全局函数别名
传递$paths
变量可能不方便。您可以使用以下两种方式之一使用助手别名方法
手动
function path($key = '', $filepath = '') { return pathconfig\PathConfig::instance()->get($key, $filepath); }
使用静态alias()
方法
pathconfig\PathConfig::alias('path');
两种方法都将创建一个名为path()
的全局辅助方法,您可以从任何地方使用它
$path = path('config', 'email.php');
从自定义位置加载路径
如果您想将路径配置文件移动到自定义位置,您需要手动设置基本路径和配置路径
pathconfig\PathConfig::instance() ->option('basepath', __DIR__ . '/../../') ->load('config/paths.php');
请注意,基本路径应该是绝对路径,但配置路径
- 可以是绝对路径
- 可以是从基本路径位置的相对路径
- 可以是文件夹引用(默认为
paths.php
) - 可以是文件名的路径,例如
my-paths.php