将静态引用的文件动态设置为 'active'

Dynamically setting statically referenced files as 'active'

目前我正在从事网上商店项目。对于这个项目,应该实现导入功能。大部分导入逻辑已经预定义。导入任务本身是一个命令行作业(artisan),它的命令和可能的参数也是预定义的。

导入的一个重要部分是映射文件,它将输入中的字段(上传的另一个网店的导出文件)映射到数据库中的字段。

我使用的框架(Aimeos for Laravel)只允许配置一个映射文件。我想做的是让用户指定他们从哪个网上商店的哪个版本导入产品(和其他数据),并为任务使​​用适当的映射文件。

我在管理面板中构建了一个表单,用户可以在其中指定源网上商店类型和版本并上传文件。当用户按下 'import' 按钮时,将调用 artisan 命令,这将启动导入过程。此过程将在配置的位置查找特定的映射文件。

但是,根据用户提供的设置,所需的映射文件位置会有所不同。我无法将参数传递给 artisan 任务(命令),因为它是在框架的核心中使用特定参数预定义的,我不想覆盖它,因为它是一个非常关键且全局使用的命令。它还用于 运行 其他工作。我不能让更新破坏我的覆盖。

所以我现在的解决方案是:根据用户指定的版本和网店类型,我将相应的映射文件重命名,比如xCart v5.3.4.5,为xcart_5.3.4 .5.active.php。在将 运行 任务的控制器中,我然后查找名称中带有 active 的映射文件。如果用户在那之后上传了另一个文件,并选择了另一种类型或版本的网上商店,我将 xcart_5.3.4.5.active.php 重命名为 xcart_5.3.4.5.php.以及新的必需映射文件,比方说 ccvshop_11.2.php 到 ccvshop_11.2.active.php.

但是,我几乎可以肯定这不是要走的路。一定有更好的方法,但我不知道怎么做。

另一种方法是动态更新配置文件的内容,其中包含一个 php 数组。但我不知道如何实现它,同时确保它能 100% 确定地工作。为此,我需要将内容写入用于整个网上商店的配置文件。如果它被破坏,整个网店都会崩溃。

我的问题其实很简单。你们对如何解决这个问题有什么建议吗?该解决方案应该是防故障的。请不要被我的解决方案蒙蔽,因为这些可能不是最好的方法。

您可以使用 config 助手即时设置配置值。

config([$key => $value]):

$key 是配置索引的点符号路径,$value 可以是任何东西,字符串、整数、数组等。

尽管这仅适用于请求生命周期,它不会将您的更改保存到磁盘。

要保存更改,您可以使用文件或存储外观。

   File::put(app_path() . '/config/customization.php', $config);