我开始使用F3框架(无脂肪框架),到目前为止它非常棒。简单轻便。我进行了设置,以便我的控制器位于一个单独的文件夹App / Controllers中,并且使用类和命名空间工作得很好。我遇到问题的是从其中一个控制器读取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类和Jig来读取简单的JSON文件。有人可以对此有所了解吗?
编辑:好的,下面的答案有所帮助,但在我的特定情况下,一切(语法)都是正确的。我认为它没有工作的原因是因为我在index.php的这一行中有错误的路径
$f3->set('AUTOLOAD','App/Controllers/');
答案 0 :(得分:1)
您面临的问题与框架无关,而与您对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