source

Symfony2 번들에 상대적인 파일 접근

manycodes 2023. 1. 19. 21:06
반응형

Symfony2 번들에 상대적인 파일 접근

Symfony2 앱의 라우팅 구성에서 다음과 같은 파일을 참조할 수 있습니다.

somepage:
    prefix: someprefix
    resource: "@SomeBundle/Resources/config/config.yml"

컨트롤러 또는 다른 PHP 코드 내에서 번들에 관련된 파일에 액세스할 수 있는 방법이 있습니까?특히 Symfony\Component\를 사용하려고 합니다.Yaml\Parser 오브젝트를 사용하여 파일을 해석합니다.이 파일을 완전히 참조하고 싶지는 않습니다.기본적으로 다음과 같은 작업을 수행합니다.

$parser = new Parser();
$config = $parser->parse( file_get_contents("@SomeBundle/Resources/config/config.yml") );

Symfony\Component\Finder를 확인했습니다.파인더 클래스요, 하지만 제가 찾는 건 그런 게 아닌 것 같아요.좋은 생각 있어요?아니면 제가 더 나은 방법을 간과하고 있는 걸까요?

실제로 커널(kernel)이라는 서비스를 이용하실 수 있습니다.$this->get('kernel'))라는 메서드가 있습니다.

예를 들어 다음과 같습니다.

$kernel = $container->getService('kernel');
$path = $kernel->locateResource('@AdmeDemoBundle/path/to/file/Foo.txt');

Thomas Kelley의 답변은 훌륭합니다(그리고 효과가 있습니다).그러나 의존성 주입을 사용하고 있거나 코드를 커널에 직접 결합하고 싶지 않다면 FileLocator 클래스/서비스를 사용하는 것이 좋습니다.

$fileLocator = $container->get('file_locator');
$path = $fileLocator->locate('@MyBundle/path/to/file.txt')

$fileLocator의 예가 될 것이다\Symfony\Component\HttpKernel\Config\FileLocator.$path파일에 대한 완전 절대 경로가 됩니다.

이 경우에도file_locator서비스 자체는 커널을 사용합니다.그것은 훨씬 작은 의존관계입니다(고객의 실장을 대체하는 것, 테스트 더블을 사용하는 것 등).

종속성 주입과 함께 사용하려면:

# services.yml

services:
    my_bundle.my_class:
        class: MyNamespace\MyClass
        arguments:
            - @file_locator

# MyClass.php

use Symfony\Component\Config\FileLocatorInterface as FileLocator;

class MyClass
{
    private $fileLocator;

    public function __construct(FileLocator $fileLocator)
    {
        $this->fileLocator = $fileLocator;
    }

    public function myMethod()
    {
        $path = $this->fileLocator->locate('@MyBundle/path/to/file.txt')
    }
}

사용할 수 있습니다.$container->getParameter('kernel.root_dir')을 손에 넣다app원하는 파일을 찾을 수 있습니다.

다음 위치에 있는 파일에서 이 작업을 수행할 경우src/.../SomeBundle/...사용할 수 있습니다.__DIR__현재 파일의 전체 경로를 가져옵니다.그 후, 추가해 주세요.Resources/...그와 같은 것으로 가는 길

$foo = __DIR__.'/Resources/config/config.yml';

언급URL : https://stackoverflow.com/questions/7585474/accessing-files-relative-to-bundle-in-symfony2

반응형