2016-09-05 5 views
1

私は現在Slimフレームワークを学ぶプロジェクトを構築しています。私はスリムの基本的な理解がかなり良いですが、名前空間はまだ私にはかなり混乱しています。自分のルートを、関連するページ(自宅、約、追加など)に基づいて別々のファイルに保存しています。問題は、私は各ルート・ファイルの先頭にインクルードファイルに名前空間を含めるにはどうすればよいですか?

use \Psr\Http\Message\ServerRequestInterface as Request; 
use \Psr\Http\Message\ResponseInterface as Response; 

を使用せずにRequestまたはResponseオブジェクトを作成することができないということです。 useをメインルートファイルの先頭に置き、すべてのインクルードファイルに使用できる方法はありますか?

たとえば、routes.phpファイルは、index.phpに含まれるstart.phpファイルに含まれています。私のルートファイル内には、それぞれの特定のルートhome.php, about.php, add.php, etcが含まれています。 routes.phpに含まれる各ファイルには、ResponseRequestに名前空間を付けずにアクセスできないuseステートメントが必要です。

+0

これはPHPでは不可能です。 [SO Namespacesの例](http://stackoverflow.com/documentation/php/1021/namespaces)、[PHP Docs](http://php.net/manual/en/language.namespaces.php)、[名前空間とは何か?](http://stackoverflow.com/questions/3384204/what-are-namespaces/3384384#3384384)。 –

答えて

2

いいえ、できません。無駄な説明 - "Use文がファイルに属しています"(ファイル内にmultiplie名前空間宣言を使用していない場合は推奨されません)また、require/includeを使って名前空間を拡張することもできません。

test.php: 
    include "MyString.php"; 
    print ","; 
    print strlen("Hello world!"); 
MyString.php: 
    namespace MyFramework\String; 
    function strlen($str) { 
     return \strlen($str)*2; 
    } 
    print strlen("Hello world!"); 

出力:24,12

しかし、あなたが名前空間に一度あなたのオブジェクトをインスタンス化することができます。そして、それらは名前空間の他のファイルで利用可能になります。

test.php: 
    namespace App; 
    include "request.php"; 
    var_dump($request); //$request object is available here 
request.php 
    namespace App; 
    use \Http\Request as Request; 
    $request = new Request(); 

また、Slimフレームワークには依存関係コンテナが必要です。多分、ここにあなたのオブジェクトを置くことができます。フレームワークに精通していないので、私を修正すること自由に感じる。

関連する問題