Contributed by
Fabien Potencier
in #22315.
在Symfony 3.3中,我们引入了大量的改变和简化,以便为将在2017年11月发布的、令人着迷的Symfony 4.0做准备。
其中的一些改变,从技术角度讲是微小的,但在程序中所起的作用却是意义深远的。在Symfony程序中,为人熟知的 Kernel::getRootDir()
方法及其连带的 kernel.root_dir
参数(parameter)极易产生误导。
它们所返回的路径,是程序的kernel (通常是 AppKernel.php
) 所在。在Symfony 2 和 3 中,此值通常是 app/
目录,因此它们一般使用诸如 %kernel.root_dir%/../var/
或 %kernel.root_dir%/../web/
这种表达式。在Symfony 4中,kernel类已被转移到 src/
目录,因此前述表达式将不会受到影响。
然而,多数时候使用 getRootDir()
为的是获取项目的根目录,在Symfony 3.3中我们决定引入一个全新的名为 Kernel::getProjectDir()
的方法,它可以为你提供准确答案。
这个新方法通过从存储了kernel的目录中去寻找包含了 composer.json
文件的第一个目录来发现项目的根目录,直至 composer.json
被找到为止。
实践中,这意味着你的程序可以简化大多数乃至全部使用了 %kernel.root_dir%
的表达式。例如,使用 %kernel.project_dir%/web/
而不是 %kernel.root_dir%/../web/
。