2017-05-01 30 views
0

我開始使用F3框架(胖免費框架),到目前爲止它非常棒。簡單而輕盈。我將其設置爲使我的控制器位於單獨的文件夾App/Controllers中,並且使用類和名稱空間的功能非常出色。在遇到麻煩的事情是從其中一個控制器讀取JSON文件。我的代碼如下:file_get_contents或從控制器讀取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類和夾具只是讀一個簡單的JSON文件。有人可以澄清這一點嗎?

編輯:好的答案下面的幫助,但在我的具體情況,一切(語法)是正確的。我認爲它不工作的原因是因爲我有錯的路徑在此行中我的index.php

$f3->set('AUTOLOAD','App/Controllers/'); 
+2

如果你得到一個文件未找到錯誤,這個問題是不是與你的邏輯。嘗試使用'__DIR__'常量爲文件使用絕對路徑。這個常量將返回調用它的php文件的路徑。我不確定你的設置目錄在哪裏,但是像這樣可以幫助:'__DIR__。 '../ settings/templates.json'' – Sehael

+0

好吧,這是行得通的,但我不禁覺得,它不是每個F3文檔的「正確」方式...... – garek007

+0

'$ f3-> read(' settings/templates.json')'應該可以工作,只要1)'settings /'文件夾放在'index.php'旁邊2)你沒有通過'cd'改變工作目錄。是這樣嗎? – xfra35

回答

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 
+0

我瞭解相對路徑。我認爲在我的情況下,我有雙引號,但實際上需要單引號。無論哪種方式,你的幫助。謝謝! – garek007

+0

的'GETCWD()'救了我:d – Terkhos