programing

Symfony2 응용 프로그램의 루트 dir를 얻는 방법

newsource 2022. 11. 16. 21:16

Symfony2 응용 프로그램의 루트 dir를 얻는 방법

컨트롤러 내부에서 루트 앱 디렉토리를 가져오는 가장 좋은 방법은 무엇입니까?콘트롤러 밖으로 꺼낼 수 있나요?

이제 인수로서 (파라미터에서) 서비스에 전달하면 다음과 같이 취득할 수 있습니다.

services:

    sr_processor:
        class: Pro\Processor
        arguments: [%kernel.root_dir%]

Symfony2에서 이 정보를 얻을 수 있는 더 쉽고 좋은 방법이 있을까요?

업데이트 2018-10-21:

이번 주부터getRootDir()더 이상 사용되지 않습니다.사용하세요getProjectDir()대신에, 무자라프 알리의 코멘트란에 제시된 바와 같이.

—-

사용방법:

$this->get('kernel')->getRootDir();

루트를 원하는 경우:

$this->get('kernel')->getRootDir() . '/../web' . $this->getRequest()->getBasePath();

컨트롤러의 액션 메서드에서 동작합니다.

EDIT: 서비스에 대해서는 가능한 한 깔끔하다고 생각합니다만, 완전한 커널 서비스를 인수로서 전달하겠습니다만...하지만 이것도 효과가 있을 거야

Symfony 3.3에서는

$projectRoot = $this->get('kernel')->getProjectDir();

웹/프로젝트 루트를 가져옵니다.

이 경로를 사용하여 코드가 아닌 프로젝트의 일부(예: 업로드 디렉터리 또는 SQLite 데이터베이스)에 액세스하는 경우 다음과 같이 경로를 매개 변수로 변경하는 것이 좋습니다.

parameters:
    database_path: '%kernel.root_dir%/../var/sqlite3.db'

이 파라미터는 필요한 모든 위치에 삽입할 수 있으므로 코드 내의 경로를 더 이상 조작할 필요가 없습니다.또한 이 파라미터는 전개 시에 덮어쓸 수 있습니다.마지막으로, 모든 유지관리 프로그래머는 당신이 그것을 무엇에 사용하고 있는지 더 잘 알게 될 것입니다.

업데이트: kernel.root_dir의 지속적인 사용량이 수정되었습니다.

다음과 같이 정규 표현도 사용할 수 있습니다.

    $directoryPath = $this->container->getParameter('kernel.root_dir') . '/../web/bundles/yourbundle/';
    $directoryPath = preg_replace("/app..../i", "", $directoryPath);
    echo $directoryPath;

Symfony 3.3에서는 다음과 같이 바인딩을 사용할 수 있습니다.

services:
_defaults:
    autowire: true      
    autoconfigure: true
    bind:
        $kernelProjectDir: '%kernel.project_dir%'

그런 다음 모든 컨트롤러 OR 서비스에서 $kernelProjectDir 매개 변수를 사용할 수 있습니다.같은

class SomeControllerOrService
{
    public function someAction(...., $kernelProjectDir)
    {
          .....

언급URL : https://stackoverflow.com/questions/9215753/how-to-get-the-root-dir-of-the-symfony2-application