Symfony2의 웹 디렉토리로 가는 서버 경로를 컨트롤러 내부에서 가져오는 방법은?
질문은 다음과 같습니다.
Symfony2의 웹 디렉토리에 대한 서버 경로를 컨트롤러 내부에서(또는 다른 곳에서) 가져오려면 어떻게 해야 합니까?
이미 찾은 내용(여기서 검색):
독트린 파일 처리에 관한 요리책 기사에 이 내용이 나와 있습니다.
$path = __DIR__ . '/../../../../web';
주변 검색을 통해 찾을 수 있으며 컨트롤러 내부에서만 사용 가능(또는 커널이 주입된 서비스):
$path = $this->get('kernel')->getRootDir() . '/../web';
그렇다면, 적어도 그 '웹' 부분은 얻을 방법이 전혀 없는 것일까요?예를 들어 제가 이름을 바꾸거나 옮기거나 하면 어떨까요?
첫 번째 기호에서 정적 sfConfig::get() 메서드를 호출하여 코드의 어디에서나 필요한 모든 것을 얻을 수 있을 때 모든 것이 쉬웠습니다.
Symfony2에서는 프레임워크가 웹디어와 완전히 독립적이기 때문에 웹디어에 대한 경로를 직접적으로 제공할 수 있는 방법이 없습니다.
사용가능getRootDir()
커널 클래스의 경우, 당신이 쓰는 것처럼.이름 변경을 고려하는 경우/web
앞으로 dir, 당신은 그것을 구성할 수 있도록 해야 합니다.예를 들어 AsseticBundle의 DI 구성에 이러한 옵션이 있습니다(여기 및 여기 참조).
컨트롤러 외부에서 루트 디렉터리에 액세스하려면 간단히 주입할 수 있습니다.%kernel.root_dir%
사용자의 서비스 구성에서 인수로 지정합니다.
service_name:
class: Namespace\Bundle\etc
arguments: ['%kernel.root_dir%']
그러면 클래스 생성자에서 웹 루트를 가져올 수 있습니다.
public function __construct($rootDir)
{
$this->webRoot = realpath($rootDir . '/../web');
}
또한 요청 서비스의 모든 ContainerAware(f.i.Controller) 클래스에서 얻을 수 있습니다.
apache를 웹 서버로 사용하는 경우(다른 웹 서버의 경우에도 솔루션이 비슷할 것으로 생각합니다) 가상 호스팅을 사용하는 경우(사용자의 URL은 이와 같습니다 -
localhost/app.php
그러면 다음을 사용할 수 있습니다.$container->get('request')->server->get('DOCUMENT_ROOT'); // in controller: $this->getRequest()->server->get('DOCUMENT_ROOT');
기타(URL은 다음과 같습니다 -
localhost/path/to/Symfony/web/app.php
:$container->get('request')->getBasePath(); // in controller: $this->getRequest()->getBasePath();
Symfony를 사용하고 있으니 "의존성 주입"을 생각해보세요 ^^
모든 SF 프로젝트에서 parameters.yml:
web_dir: "%kernel.root_dir%/../web"
따라서 컨트롤러 내에서 이 매개 변수를 안전하게 사용할 수 있습니다.
$this->getParameter('web_dir');
제 해결책은 이 코드를 앱에 추가하는 것입니다.php
define('WEB_DIRECTORY', __DIR__);
문제는 상수를 사용하는 명령줄 코드가 깨진다는 것입니다.앱/콘솔 파일 및 기타 환경 프론트 컨트롤러에 상수를 추가할 수도 있습니다.
다른 솔루션으로는 앱커널에서 DIR을 반환하는 정적 메서드를 추가할 수 있습니다.'/...web/' 그래서 어디서나 액세스할 수 있습니다.
업데이트: 2.8부터는 애셋이 기본적으로 더 이상 포함되지 않으므로 더 이상 작동하지 않습니다.비록 당신이 아세트를 사용한다면 이것은 효과가 있을 것입니다.
를 할 수 .%assetic.write_to%.
$this->getParameter('assetic.write_to');
자산은 이 변수를 사용자의 웹 디렉토리에 버리기 때문에 웹 폴더를 찾는 데 사용하는 것이 안전합니다.
http://symfony.com/doc/current/reference/configuration/assetic.html
Symfony3의 경우 컨트롤러에서 시도해 봅니다.
$request->server->get('DOCUMENT_ROOT').$request->getBasePath()
$host = $request->server->get('HTTP_HOST');
$base = (!empty($request->server->get('BASE'))) ? $request->server->get('BASE') : '';
$getBaseUrl = $host.$base;
Symfony 3.3 이후로.
합니다.%kernel.project_dir%/web/
%kernel.root_dir%/../web/
언급URL : https://stackoverflow.com/questions/9265788/how-to-get-the-server-path-to-the-web-directory-in-symfony2-from-inside-the-cont
'programing' 카테고리의 다른 글
파라미터로 외부 프로그램을 호출하는 방법은? (0) | 2023.10.09 |
---|---|
콜백_핸들러는 WooCommerce를 해고하지 않습니다. (0) | 2023.10.09 |
난수 생성을 시드하는 데 시간을 사용하는 대안이 있습니까? (0) | 2023.10.09 |
Forms cookie 암호를 해독할 때 "암호화 작업 중 오류 발생 (0) | 2023.10.09 |
PHP: 클래스는 "Call to private method ... from context ..." 문제를 확장합니다. (0) | 2023.10.09 |