[英]Update laravel config file permanently through a dedicated view
我创建了一个 Laravel 应用程序,其视图是一个表单,其中包含一些由 laravel 配置文件“config.options”填充的输入字段。
我想通过这个特定的视图更新这个文件,我说的是配置文件夹中的标准 php 文件,而不是数据库内容。
为此,在我的 controller 中,我有一个这样的更新方法
LARAVEL PHP CONTROLLER
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
/*VarExporter is just a library to beautify parsed arrays instead of using var_export*/
use Brick\VarExporter\VarExporter;
class SettingsController extends Controller
{
public function update(Request $request){
$values = $request->validate([
"support_mail" => ['required', 'email:rfc,dns'],
"api_endpoint" => ['required','URL']
]);
$config = (object) config('options');
$config->support_mail = $request->support_mail;
$config->api_endpoint= $request->api_endpoint;
$newConfig = VarExporter::export(
(array) $config,
VarExporter::INLINE_SCALAR_LIST | VarExporter::ADD_RETURN
);
if( \File::put(base_path() . '/config/options.php', "<?php\n\n". $newConfig) ) {
\Artisan::call('config:clear');
return back()->with('message', 'Settings updated');
}
}
我在这里做的是:
这很简单,毫无疑问,问题是当我在成功提交后返回视图时,输入字段没有更新,但如果我等待 2 秒并刷新页面,配置看起来已更新。 所以我试着睡了 2 秒
sleep(2);
return back()->with('message', 'Settings updated');
在返回和更新字段之前,就像我刷新缓存时需要一些时间来更新配置,或者至少比刷新页面所花费的时间更长。
我真的尝试了一切,但我找不到出路,显然我知道我可以通过数据库做到这一点,但我想了解如何以这种方式做到这一点只是为了教育目的。 我假设我必须每秒做一次循环来检查配置缓存是否清除然后返回,但我无法理解配置缓存存储在哪里,因为框架/缓存/数据看起来是空的
更新
只是为了排除与配置缓存相关的内容,我尝试使用不相关的框架文件来做同样的事情,而不是配置助手,我使用了规范 PHP 语言和 file_put_contents 的要求。 结果完全一样..所以我在想php对文件系统的管理,我不认为laravel相关。
更新 2
好的......如果我登录
file_get_contents(base_path() . '/config/options.php')
代替
config('options')
提交后,数据将被更新..我认为与配置助手相关的东西也是如此
好的,我找到了,经过 100 万次检查试图了解它是否与 laravel 生态系统或服务器端相关,我发现它是 opcache,显然它是 opcache,因为对于 opcache 来说,一个包含数据的文件只是一个脚本,所以它是缓存,在我的例子中,更改后更新缓存大约需要 1.5 秒。 有时,当您使用框架时,您会忘记主要语言的基础知识。 您可以使用
opcache_reset();
提交数据后解决这个问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.