SlimFrameworkは初めてです。Codeigniter関数のようにベースURLを取得するにはどうすればよいbase_url()
ですか?
ありがとう
次のように取得する前に、最初にベースURLを手動で設定する必要があります。
$app->hook('slim.before', function () use ($app) {
$app->view()->appendData(array('baseUrl' => '/base/url/here'));
});
Slim v3では、PSR7を実装しているため、PSR7 Uriオブジェクトを取得し、Slim3が追加するgetBasePath()メソッドを呼び出すことができます。単に書く:
$basePath = $request->getUri()->getBasePath();
ベースパス
Slimアプリケーションのフロントコントローラーがドキュメントルートディレクトリの下の物理サブディレクトリにある場合は、UriオブジェクトのgetBasePath()メソッドを使用してHTTPリクエストの物理ベースパス(ドキュメントルートを基準とする)をフェッチできます。Slimアプリケーションがドキュメントルートの最上位ディレクトリにインストールされている場合、これは空の文字列になります。
getBasePath()メソッドはフレームワークによって追加され、PSR7UriInterfaceの一部ではないことに注意してください。
Twigを使用している最近のアプリでは、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
、構成は必要ありません。
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 ));
});
でベースURLを取得できます{{ app.request.getRootUri }}
(Twigテンプレートエンジンを使用しています)。ちなみに、これは「SCRIPT_NAME」環境変数と同じです。
TWIGを使用している場合は、Slimv3で呼び出します-
{{ base_url() }}
または使用する{{ path_for('yourRouteName') }}
ベースURLを取得する最も簡単な方法は、次のようにリクエストURLとリクエストルートURLを追加することです。
$req = $app->request;
$base_url = $req->getUrl()."".$req->getRootUri()."/";