Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将静态引用的文件动态设置为“活动”_Php_Laravel_Laravel Artisan - Fatal编程技术网

Php 将静态引用的文件动态设置为“活动”

Php 将静态引用的文件动态设置为“活动”,php,laravel,laravel-artisan,Php,Laravel,Laravel Artisan,目前我正在从事一个网上商店项目。对于该项目,应实现导入功能。导入逻辑的很大一部分已经预定义。导入任务本身是一个命令行作业artisan,其命令和可能的参数也是预定义的 导入的一个重要部分是映射文件,它将另一个web shop的输入上载导出文件中的字段映射到数据库中的字段 我使用的Aimeos for Laravel框架只允许配置一个映射文件。我想做的是,让用户指定从哪个版本的网店导入产品和其他数据,并为任务使用适当的映射文件 我已经在管理面板中构建了一个表单,用户可以在其中指定源网店的类型和版本

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

导入的一个重要部分是映射文件,它将另一个web shop的输入上载导出文件中的字段映射到数据库中的字段

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

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

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

因此,我现在的解决方案是:根据用户指定的web shop版本和类型,我将相应的映射文件(比如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 helper动态设置配置值

$key是指向配置索引的点表示法路径,$value可以是任何内容、字符串、int、数组等

但这仅适用于请求生命周期,不会将更改持久化到磁盘

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

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