2017-05-01 11 views
0

私はF3フレームワーク(Fat Free Framework)を使い始めています。シンプルで軽い。私はそれが私のコントローラが別のフォルダのApp/Controllersにあり、クラスと名前空間を使って素晴らしい作業をするように設定しました。私が問題を抱えているのは、これらのコントローラの1つから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クラスとジグを使用してすべきではないよう

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

それはそうです単純なJSONファイルを読んでください。誰かがこれにいくつかの光を発することができますか?

EDIT:Okは以下の回答を助けましたが、私の特定のケースでは、すべて(構文が正しい)でした。私はあなたが直面している問題は、フレームワークではなく、親戚・パスのご理解とは関係ありません

$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

私のindex.phpのこの行の間違ったパスを持っていたので、それが機能しなかった理由だったと思いますPHPで。相対パスは常にworking directoryとの相対パスです。

chdirコマンドで作業ディレクトリを明示的に変更しない限り、Web用のフレームワークを使用している場合(CLIモードではない場合)、作業ディレクトリはindex.phpのディレクトリです。

getcwd()をスクリプトの最上部にエコーすることで確認できます。 (それはindex.phplib/web.phpapp/controllers/foo.phpまたは任意のディレクトリにあるすべてのファイルから呼び出されていた場合に関係なく)アプリケーションで使用されている任意の相対パスを意味

は、そのディレクトリへの相対パスです。

だからあなたの場合には、settingsディレクトリはindex.phpと同じディレクトリに存在することが予想されます。

apps/ 
    controllers/ 
settings/ 
    templates.json 
index.php 
+0

私は相対パスを理解しています。私は私の場合は二重引用符を持っていたと思いますが、実際には一重引用符が必要でした。いずれにせよ、あなたは助けました。ありがとう! – garek007

+0

'getcwd()'が私を救った:D – Terkhos

関連する問題