当前位置:  开发笔记 > 编程语言 > 正文

为什么不应在Symfony中使用绝对路径常量__DIR__和__FILE__

如何解决《为什么不应在Symfony中使用绝对路径常量__DIR__和__FILE__》经验,为你挑选了2个好方法。

我使用SensioLabs Insight来控制我的代码质量.

对于简单的文件上传,我必须获取上传目录的绝对路径:

protected function getUploadRootDir()
{
    // the absolute directory path where uploaded
    return __DIR__.'/../../../../web/'.$this->getUploadDir();
}

代码直接来自官方文档(如何使用Doctrine处理文件上传)

但SLInsight提出了一个警告,如果分析的代码中包含__DIR____FILE__PHP魔术常量:

__DIR____FILE__常量可能与Symfony资源覆盖系统冲突.

如何使用这些常量会导致与Symfony冲突?

我怎样才能在代码中避免它们?



1> Javier Eguil..:

对于文件上载类,您可以忽略此错误消息.但在其他情况下,最好使用Symfony文件定位器而不是硬编码文件路径.例如:

$path = $this->get('kernel')->locateResource('@AppBundle/Resources/config/services.xml');

代替:

$path = __DIR__.'/../../../src/Acme/AppBundle/Resources/config/services.xml'


好吧,我会说从实体获取上传目录已经不干净了.实体不应该负责知道上传文件的存储位置(例如,甚至可能不在本地,而是在S3上)

2> Christophe C..:

嗯,这实际上是SensioLabs Insight无法正确处理的事情.由于资源覆盖系统,它警告不要使用常量,但在许多情况下,这些常量用于与资源覆盖系统无关的位置(这可能是您的代码的情况).所以你可以在这种情况下忽略警告

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有