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')
);
可以从容器中注入或检索路径