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

时间:2015-08-11 18:11:14

标签: symfony

Symfony2。在controller中,我想定义一个我的捆绑的Resources/public/pdf目录的路径。

如果我使用__DIR__,我会获得我的捆绑包的Controller目录的路径; if $this->get('kernel')->getRootDir(),App目录的路径。无论哪种方式,我都无法移回上一级目录。

我该怎么办?

PS。 $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';

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

如果困扰你,realpath函数(http://php.net/manual/en/function.realpath.php)可以清理所有点点内容。

// 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')
    );

可以从容器中注入或检索路径。

答案 1 :(得分:0)

是的,有:

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

根据Accessing Files Relative to Bundle in Symfony2