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') }}
( 홈페이지 또는 라우팅 파일에서 호출하는 이름).
이제 나뭇 가지 템플릿에서 무료로 사용할 수 있습니다 (sf2 버전 2.0.14에서 테스트 됨).
{{ app.request.getBaseURL() }}
이후 Symfony 버전 (2.5에서 테스트 됨)에서는 다음을 시도하십시오.
{{ app.request.getSchemeAndHttpHost() }}
{{ app.request.baseUrl }}
(게터 메서드를 찾아 자동으로 호출합니다)
{{ app.request.getSchemeAndHttpHost() }}
작동합니다!
Symfony v2.1부터 v4.1 이상까지 유효
Symfony 애플리케이션에 대한 기본 URL을 원하는 경우 라우터 경로 및 쿼리 문자열이없는 경우를 제외하고 작동 방식 과 유사하게 getSchemeAndHttpHost()
와 함께 연결 을 사용해야 합니다.getBaseUrl()
getUri()
{{ app.request.schemeAndHttpHost ~ app.request.baseUrl }}
예를 들어 Symfony 웹 사이트 URL이에있는 https://www.stackoverflow.com/app1/
경우 다음 두 메서드가 다음 값을 반환합니다.
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')) }}
Symfony 5와 컨트롤러 메서드의 일반적인 상황에서는 삽입 된 요청을 사용합니다. 객체를 합니다.
public function controllerFunction(Request $request, LoggerInterface $logger)
...
$scheme = $request->getSchemeAndHttpHost();
$logger->info('Domain is: ' . $scheme);
...
//prepare to render
$retarray = array(
...
'scheme' => $scheme,
...
);
return $this->render('Template.html.twig', $retarray);
}
나는 여기에서 모든 옵션을 시도했지만 그들은 나를 위해 작동하지 않았습니다. 결국 나는 그것을 사용하여 작동하게했습니다.
{{site.url}}
이것이 여전히 어려움을 겪고있는 사람에게 도움이되기를 바랍니다.
site
포함되어 있습니까?