【问题标题】:Symfony2 How to get the Web or MyBundle directory from inside a controller?Symfony2 如何从控制器内部获取 Web 或 MyBundle 目录?
【发布时间】:2015-11-04 02:33:55
【问题描述】:

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

如果我使用__DIR__,我将获得我的包的控制器目录的路径;如果是$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';

有没有更好的办法?

【问题讨论】:

    标签: symfony


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      是的,有:

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

      根据Accessing Files Relative to Bundle in Symfony2

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-16
        • 2014-05-01
        • 1970-01-01
        • 2021-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多