それを行うより良い方法があります:
$this->container->get('kernel')->locateResource('@AcmeDemoBundle')
AcmeDemoBundle への絶対パスを指定します
$this->container->get('kernel')->locateResource('@AcmeDemoBundle/Resource')
AcmeDemoBundle 内の Resource dir へのパスを指定するなど...
そのようなディレクトリ/ファイルが存在しない場合、InvalidArgumentException がスローされます。
また、コンテナー定義では、以下を使用できます。
my_service:
class: AppBundle\Services\Config
arguments: ["@=service('kernel').locateResource('@AppBundle/Resources/customers')"]
編集
サービスはkernelに依存する必要はありません。使用できるデフォルトの symfony サービスがあります: file_locator。内部でKernel::locateResourceを使用しますが、テストでダブル/モックする方が簡単です。
サービス定義
my_service:
class: AppBundle\Service
arguments: ['@file_locator']
クラス
namespace AppBundle;
use Symfony\Component\HttpKernel\Config\FileLocator;
class Service
{
private $fileLocator;
public function __construct(FileLocator $fileLocator)
{
$this->fileLocator = $fileLocator;
}
public function doSth()
{
$resourcePath = $this->fileLocator->locate('@AppBundle/Resources/some_resource');
}
}