Symfony2如何从控制器内部获取Web或MyBundle目录?

Symfony2如何从控制器内部获取Web或MyBundle目录?,symfony,Symfony,Symfony2。在控制器中,我想定义一个指向我的包的资源/public/pdf目录的路径 如果我使用\uuuuu DIR\uuuuuu,我将获得我的包的控制器目录的路径;如果$this->get('kernel')->getRootDir(),则为应用程序目录的路径。无论哪种方式,我都无法移回上层目录 我该怎么办 另外,类似于$this->get('kernel')->getRootDir()。/../src/的东西呈现../app/../src/ 编辑我通过一个非常简单和丑陋的修复得到了我所

Symfony2
。在
控制器
中,我想定义一个指向我的包的
资源/public/pdf
目录的路径

如果我使用
\uuuuu DIR\uuuuuu
,我将获得我的包的控制器目录的路径;如果
$this->get('kernel')->getRootDir()
,则为应用程序目录的路径。无论哪种方式,我都无法移回上层目录

我该怎么办

另外,类似于
$this->get('kernel')->getRootDir()。/../src/
的东西呈现
../app/../src/

编辑我通过一个非常简单和丑陋的修复得到了我所需要的:

$path001 = $this->get('kernel')->getRootDir().'/';
$path002 = explode('/', $path001);
$path003 = array_pop($path002);
$path003bis = array_pop($path002);
$path004 = implode("/", $path002);
$path_pdf  = $path004.'/src/Mario/<MyBundle>/Bundle/Resources/public/pdf';
$path001=$this->get('kernel')->getRootDir();
$path002=分解(“/”,$path001);
$path003=数组\u pop($path002);
$path003bis=数组_pop($path002);
$path004=内爆(“/”,$path002);
$path_pdf=$path004'/src/Mario//Bundle/Resources/public/pdf';
有更好的方法吗?

是的,有:

$kernel = $this->container->getService('kernel');
$path = $kernel->locateResource('@MarioMyBundle/Resources/public/pdf/file.pdf');
根据

的说法,realpath函数()可以清除所有的dot-dot内容,如果它困扰您的话

// From a controller
$resourceDir = realpath(__DIR__ . '/../Resources');
当然,这仅在控制器位于固定目录中且从不移动时才有效

我喜欢使用依赖项注入扩展设置参数

class CeradProjectExtension extends Extension
{
  public function load(array $configs, ContainerBuilder $container)
  {
    $configuration = new Configuration();
    $config = $this->processConfiguration($configuration, $configs);

    $container->setParameter(
      'sportacus_project_resources_dir',
      realpath(__DIR__ . '/../Resources')
    );
可以从容器中注入或检索路径