CodeIgniterからSymfony 2に切り替えます。次の方法の例を誰かに教えてもらえますか?
- ベースURL(ルート固有の部分のないURL)を取得します
- この変数をtwigバンドルにグローバルに渡して、すべてのテンプレートで使用できるようにします。
CodeIgniterからSymfony 2に切り替えます。次の方法の例を誰かに教えてもらえますか?
回答:
このルートURLを取得する必要があるのはなぜですか?絶対URLを直接生成できませんか?
{{ url('_demo_hello', { 'name': 'Thomas' }) }}
このTwigコードは、_demo_helloルートへの完全なhttp:// URLを生成します。
実際、ウェブサイトのベースURLを取得しても、ホームページルートの完全なURLが取得されるだけです。
{{ url('homepage') }}
(ホームページ、またはルーティングファイルで呼び出す名前)。
これはtwigテンプレートで無料で利用可能になりました(sf2バージョン2.0.14でテスト済み)
{{ app.request.getBaseURL() }}
それ以降のSymfonyバージョン(2.5でテスト済み)では、以下を試してください。
{{ app.request.getSchemeAndHttpHost() }}
{{ app.request.baseUrl }}
ます(getterメソッドを見つけて自動的に呼び出します)
{{ app.request.getSchemeAndHttpHost() }}
うまくいきます!
Symfony v2.1からv4.1 +まで有効
SymfonyアプリケーションへのベースURLが必要な場合は、ルーターパスとクエリ文字列を除いて、動作と同様に、とgetSchemeAndHttpHost()
連結して使用する必要があります。getBaseUrl()
getUri()
{{ app.request.schemeAndHttpHost ~ app.request.baseUrl }}
たとえば、Symfony WebサイトのURLがにあるhttps://www.stackoverflow.com/app1/
場合、これらの2つのメソッドは次の値を返します:
getSchemeAndHttpHost
https://www.stackoverflow.com
getBaseUrl
/app1
注:URLにgetBaseUrl()
含まれている/app.php
場合は、スクリプトのファイル名(つまり)を含めます。
Symfony 2.3以降の場合、コントローラーのベースURLを取得するには
$this->get('request')->getSchemeAndHttpHost();
$this->container->get('request')->getSchemeAndHttpHost()
<base href="{{ app.request.getSchemeAndHttpHost() }}"/>
またはコントローラーから
$this->container->get('router')->getContext()->getSchemeAndHttpHost()
また、js / css / image urlには便利な関数asset()があります
<img src="{{ asset('image/logo.png') }}"/>
現在のSymfonyバージョン(この回答を書いている時点ではSymfony 4.1)は、他のいくつかの回答で行われているように、サービスコンテナーに直接アクセスしないでください。
代わりに(標準のサービス構成を使用しない場合を除き)、タイプヒントによって要求オブジェクトを挿入します。
<?php
namespace App\Service;
use Symfony\Component\HttpFoundation\RequestStack;
/**
* The YourService class provides a method for retrieving the base URL.
*
* @package App\Service
*/
class YourService
{
/**
* @var string
*/
protected $baseUrl;
/**
* YourService constructor.
*
* @param \Symfony\Component\HttpFoundation\RequestStack $requestStack
*/
public function __construct(RequestStack $requestStack)
{
$this->baseUrl = $requestStack->getCurrentRequest()->getSchemeAndHttpHost();
}
/**
* Returns the current base URL.
*
* @return string
*/
public function getBaseUrl(): string
{
return $this->baseUrl;
}
}
現在のリクエストオブジェクトを取得する方法については公式のSymfonyのドキュメントも参照してください。
{{ dump(app.request.server.get('DOCUMENT_ROOT')) }}
ここですべてのオプションを試しましたが、うまくいきませんでした。最終的に私はそれを使ってそれを動作させました
{{ サイトのURL }}
これがまだ苦労している人を助けることを願っています。
site
含まれていますか?