file_get_contents 或从控制器读取 JSON 文件

file_get_contents or read JSON file from Controller

我正在开始使用 F3 框架(Fat Free 框架),到目前为止它很棒。简单轻便。我对其进行了设置,以便我的控制器位于单独的文件夹 App/Controllers 中,并且使用 classes 和名称空间效果很好。我遇到的问题是从其中一个控制器读取 JSON 文件。我的代码如下:

$json = $f3->read('settings/templates.json');
$templates = json_decode($json);
var_dump($templates);
$fields = $templates->$template->fields;

我这样试过,这样试过

$json = file_get_contents('settings/templates.json');
$templates = json_decode($json);
var_dump($templates);
$fields = $templates->$template->fields;

但无论哪种方式,我都会收到找不到文件的错误。所以不知何故, F3 找不到文件。我不确定我是否需要将其包含在 AUTOLOAD 中,或者是否有更好的方法来执行此操作。

我像这样将它作为数据库进行了尝试,它找到了文件,但不知何故这似乎不对:

$db = new \DB\Jig ( 'settings/' , \DB\Jig::FORMAT_JSON );
$user= new \DB\Jig\Mapper($db, 'templates.json');
var_dump($templates);
$fields = $templates->$template->fields;

看来我不应该使用 DB class 和 Jig 来读取一个简单的 JSON 文件。有人可以对此有所了解吗?

编辑:好的,下面的答案有帮助,但在我的特殊情况下,一切(语法)都是正确的。我认为它不起作用的原因是因为我在 index.php

的这一行中的路径错误
$f3->set('AUTOLOAD','App/Controllers/');

您遇到的问题与框架无关,而是与您对 PHP 中的亲属路径的理解有关。相对路径总是相对于 working directory.

如果您使用的是 web 框架(而不是 CLI 模式),工作目录就是您的 index.php 所在的目录,只要您不显式更改工作目录使用 chdir 命令的目录。

您可以通过在脚本的最顶部回显 getcwd() 来验证它。

这意味着您的应用程序中使用的任何相对路径(无论它是从 index.phplib/web.phpapp/controllers/foo.php 还是位于任何目录中的任何文件调用的)都是相对的到那个目录。

因此,在您的情况下,settings 目录应位于与 index.php:

相同的目录中
apps/
  controllers/
settings/
  templates.json
index.php