【发布时间】:2021-05-21 12:08:55
【问题描述】:
我正在本地开发一个作曲家包以调整图像大小。我有一个类,它的方法根据配置文件中的设置调整大小。配置文件设置了一些变量,如图像位置、大小等。
Composer 包结构:
/src
- ImageResizer.php
- config.php
- /config
- Config.php
由于这是一个作曲家包,我的问题是在我的 config.php 文件中设置相对于它所服务的项目的路径,而不是相对于供应商目录。
config.php
'paths' => [
'source' => 'source/_images',
'new' => 'source/assets/images',
],
例如,在我的配置文件中,我设置了上面的路径。我需要这些路径相对于根项目,而不是相对于包/供应商文件夹内部。确保它们与安装它们的项目相关的最佳方法是什么?
参考:完整的包可以在这里找到: https://github.com/nathangross/php-image-resizer
回复:cmets:
此外,即使使用根项目目录中的用户配置文件,ImageResizer.php 也会在其自己的目录中查找路径。所以也许我的问题在于调整大小的方法:
ImageResizer.php
class ImageResizer
{
public static function resizeImageWidth()
{
$config = new Config;
$config->load(__DIR__ . '/config.php');
$sourcePath = $config->get('paths.source');
$directory = new RecursiveDirectoryIterator($sourcePath);
$iterator = new RecursiveIteratorIterator($directory);
$regex = new RegexIterator($iterator, '@^(?<directory>.+)/(?<filename>[^/]+)\.(?P<extension>
jpe?g|png)$@i', RecursiveRegexIterator::GET_MATCH);
foreach ($regex as $entry => $match) {
// ... do some image resizy stuff
}
}
}
【问题讨论】:
-
配置路径必须由用户在其项目中设置。否则他会使用你的配置。同时删除 require 'config/Config.php';从你的类和设置路径到 src 像这样getcomposer.org/doc/04-schema.md#psr-4
-
要使用您的配置,您可以设置为 getcomposer.org/doc/04-schema.md#files 但这对您的项目来说是个坏方法。
-
同意使用 composer 自动加载配置文件。我从概念上理解它,但是在正确设置它时遇到了问题。我一次迈出这一步;)
-
我也同意允许用户设置配置。我也在努力进行设置。对于这个特定的项目,实际上有一个项目级别的配置文件。但是,即使我在那里设置了路径,我仍然遇到上面提到的相同问题:该方法从配置中获取相对路径并在供应商文件夹中搜索。我将进行编辑以更好地解释这一点。
-
$resizer = new ImageResizer($config); $resizer->resizeImageWidth();
标签: php package composer-php