2012-07-14 16 views
6

スリムフレームワークの新機能です。 Codeigniter関数のようにベースURLを取得するにはbase_url()?あなたはそれを、こののように を得ることができる前にFIRST手動でベースURLを設定する必要がスリムフレームワークのベースURL

おかげ

+0

を使用あなたは既にドキュメントを確認しましたか? http://www.slimframework.com/documentation/stable –

答えて

17

$app->hook('slim.before', function() use ($app) { 
    $app->view()->appendData(array('baseUrl' => '/base/url/here')); 
}); 

http://help.slimframework.com/discussions/questions/49-how-to-deal-with-base-path-and-different-routes

+2

私は彼が "設定しない"方法を尋ねていたと思う。 –

+0

はい私は気づいたが、最初に設定する必要がある。デフォルトではありません。これを明確にするために私の答えを編集しました –

+1

@SosialLab右のように、上記の方法で設定した後、テンプレートの中で、次のようなものを使用してください。 ' ' –

4

ベースを設定するためにはindex.phpでこれを試してみてください表示のためのURL

$app->hook('slim.before', function() use ($app) { 
    $posIndex = strpos($_SERVER['PHP_SELF'], '/index.php'); 
    $baseUrl = substr($_SERVER['PHP_SELF'], 0, $posIndex); 
    $app->view()->appendData(array('baseUrl' => $baseUrl)); 
}); 
+0

これはWordPressの同じ機能を思い出させます。これはフレームワークのドキュメントの「基本」に含める必要があります。 –

6

次のように我々は小枝を使用しているセントのアプリは、私たちはhttpBasePathを割り当てる:

$view = $app->view()->getEnvironment(); 
$view->addGlobal('httpBasePath', $app->request->getScriptName()); 

addGlobal()方法は、おそらく$app->view()->appendData()に相当し、私はわかりません。

$app->request->getScriptName()を使用することの利点は、我々は、手動でフォルダ名を設定するか、それが何であるかを気にする必要はありませんということです - 1人の開発者がhttp://example.localhostに位置レポを持つことができますし、別のhttp://localhost/projects/slimでそれを持つことができますし、何の設定は必要ありません。

2

{{ app.request.getRootUri }}でベースURLを取得できます(私はTwigテンプレートエンジンを使用しています)。 ちなみに、これは 'SCRIPT_NAME'環境変数と同じです。

1

ベースURLを取得する最も簡単な方法は、以下のようにリクエストURLとリクエストルートURLを追加することです: $req = $app->request; $base_url = $req->getUrl()."".$req->getRootUri()."/";

11

スリムv3のでは、それはPSR7を実装して、あなたがPSR7ウリオブジェクトとコールを取得することができますSlim3が追加するgetBasePath()メソッド単に書く:

$basePath = $request->getUri()->getBasePath(); 

Slim v3 documentationから:

ベース・パス

あなたのスリムアプリケーションのフロントコントローラは、ドキュメントルートディレクトリの下の物理サブディレクトリに住んでいる場合は、HTTPをフェッチすることができますUriオブジェクトのgetBasePath()メソッドを使用して、リクエストの物理的なベースパス(ドキュメントルートからの相対パス)を取得します。 Slimアプリケーションがドキュメントルートの一番上のディレクトリにインストールされている場合、これは空の文字列になります。

getBasePath()メソッドはフレームワークによって追加され、PSR7 UriInterfaceの一部ではないことに注意してください。

+0

PSR-7 Uriインタフェースには、このようなメソッドgetBasePath()はありません。 –

+0

@StefanoTorresi:Slim3は、PSR7 Uriオブジェクトに対してgetBasePath()を提供しています。英語が私の母国語ではないと誤って表現していると誤解されるかもしれません。私はこのメソッドがPSR7 Uriインターフェイスの一部であると書いたことはありません。 Slim3のドキュメントを参照してください。 –

+0

'getBasePath()'メソッドは 'Slim \ Http \ Uri'に固有で、PSR-7には準拠していません。 ドキュメントの残りの部分では、PSR-7インターフェイスのヒントを示唆しているので、実装固有の方法を使用すると、ベンダーがロックインし、PSR-7サポートが与えることが意図された移植性が損なわれます最初の場所。 答えを明確にするために、PSR-7のリファレンスを削除することをお勧めします。なぜなら、提案された方法が標準の一部であることを意味するからです。 –

2

あなたはスリムv3の呼び出しで、その後TWIGを使用している場合 -

{{ base_url() }} 

または{{ path_for('yourRouteName') }}

関連する問題