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.php
、lib/web.php
、app/controllers/foo.php
还是位于任何目录中的任何文件调用的)都是相对的到那个目录。
因此,在您的情况下,settings
目录应位于与 index.php
:
相同的目录中
apps/
controllers/
settings/
templates.json
index.php
我正在开始使用 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.php
、lib/web.php
、app/controllers/foo.php
还是位于任何目录中的任何文件调用的)都是相对的到那个目录。
因此,在您的情况下,settings
目录应位于与 index.php
:
apps/
controllers/
settings/
templates.json
index.php