【发布时间】:2016-03-23 17:33:15
【问题描述】:
我使用SensioLabs Insight 来控制我的代码质量。
对于简单的文件上传,我必须获取上传目录的绝对路径:
protected function getUploadRootDir()
{
// the absolute directory path where uploaded
return __DIR__.'/../../../../web/'.$this->getUploadDir();
}
代码直接来自官方文档 (How to handle file uploads with Doctrine)
但如果分析的代码包含__DIR__ 或__FILE__ PHP 魔术常量,则 SLInsight 会发出警告:
__DIR__和__FILE__常量可能与 Symfony 资源覆盖系统冲突。
如何使用这个常量会导致与 Symfony 的冲突?
我怎样才能在我的代码中避免它们?
【问题讨论】:
-
标题具有误导性。通常推荐使用绝对路径常量
__FILE__和__DIR__。 仅当您在项目中使用 Symfony(或它的文件定位器)时,最好使用 Symfony 的文件定位器。 -
对,我已经更新了。谢谢
-
说实话,如果我看到这段代码,我的反应会是“肯定有比这更好的方法”。您正在硬编码您想要的路径正好是 4 级,然后是一个名为“web”的目录,然后是一个动态段。这看起来非常脆弱和不灵活。当然,整个路径应该配置在某个地方,相对于某个特定的基础。
-
你说得对,Symfony 提供了帮助程序来获取应用程序不同部分的路径(即@JavierEguiluz 的答案),但它们不能从实体访问。此外,整个方法可以通过在控制器而不是实体中进行优化。
标签: php symfony magic-constants