目前我正在开展网上商店项目。对于此项目,应实施导入功能。很大一部分导入逻辑已经预先定义。导入任务本身是一个命令行作业(工匠),命令和可能的参数也是预先定义的。
导入的一个重要部分是映射文件,它将输入中的字段(另一个网上商店的上载导出文件)映射到数据库中的字段。
我正在使用的框架(Aimeos for Laravel)只允许配置一个映射文件。我正在尝试做的是让用户指定他们导入产品(和其他数据)的Web商店的版本,并使用适当的映射文件来完成任务。
我在管理面板中构建了一个表单,用户可以在其中指定源Web商店类型和版本并上传文件。当用户按下“导入”按钮时,将调用一个工匠命令,该命令将启动导入过程。此过程将在配置的位置查找特定的映射文件。
但是,根据用户提供的设置,所需的映射文件位置会有所不同。我无法将参数传递给artisan任务(命令),因为它是在框架的核心中使用特定参数预定义的,我不想覆盖它,因为它是一个非常关键且全局使用的命令。它也用于运行其他工作。我不可能发生更新会破坏我的覆盖。
所以我现在的解决方案是:根据用户指定的web-shop版本和类型,我将相应的映射文件重命名为xcart_5.3.4.5.active.php,假设xCart v5.3.4.5 。在将运行任务的控制器中,然后我在名称中查找具有活动的映射文件。如果用户在此之后上传另一个文件,并选择其他类型或版本的网店,我将xcart_5.3.4.5.active.php重命名为xcart_5.3.4.5.php。和新的必需的映射文件,比如说ccvshop_11.2.php到ccvshop_11.2.active.php。
但是,我几乎可以肯定这不是可行的方法。必须有更好的方法来做到这一点,但我不知道如何。
我能做到的另一种方法是动态更新包含php数组的配置文件的内容。但我知道没有办法实现这一点,同时确保它将100%确定。为此,我需要将内容写入配置文件,该文件用于整个网店。如果它被破坏,整个网店将会破裂。
我的问题其实很简单。你们对如何解决这个问题有任何建议吗?解决方案应该是防止故障的。请不要被我的解决方案蒙蔽,因为这些可能不是最佳方式。
答案 0 :(得分:1)
您可以使用config
帮助程序即时设置配置值。
config([$key => $value]):
$ key是配置索引的点符号路径,$ value可以是任何字符串,字符串,整数,数组等。
这仅适用于请求生命周期,但它不会将更改持久保存到磁盘。
要保存更改,您可以使用文件或存储外墙。
File::put(app_path() . '/config/customization.php', $config);