Contributed by
Fabien Potencier
in #21635.
几周之前,我们发布了一篇关于在Symfony 3.3中 使用glob patterns来导入文件 的文章,由于社区的反响是如此之热狂,我们不得不在框架中全面改进对glob patterns的通用型支持。
使用glob patterns,之前只能用在导入文件时,并且被限制在容器所用到的文件,因此你不能在路由文件中使用它。
这项新功能,把全部glob pattern的逻辑给移到了 Config组件,并且添加了一个 GlobFileLoader
类,用于使用glob patterns来加载文件。更甚者,新的loader被注册到路由和容器的加载器之中。
下例是从即将公开的"Symfony Flex"项目中的 Kernel
类中提取出来(的代码),展示了这个用在Symfony micro kernel中的全新的glob文件加载器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | namespace Symfony\Flex;
use Symfony\Component\HttpKernel\Kernel as BaseKernel;
class Kernel extends BaseKernel
{
use MicroKernelTrait;
const CONFIG_EXTS = '.{php,xml,yaml,yml}';
// ...
protected function configureContainer(ContainerBuilder $container, LoaderInterface $loader)
{
$confDir = dirname($this->getRootDir()).'/etc';
$loader->import($confDir.'/packages/*'.self::CONFIG_EXTS, 'glob');
$loader->import($confDir.'/packages/'.$this->getEnvironment().'/**/*'.self::CONFIG_EXTS, 'glob');
$loader->import($confDir.'/container'.self::CONFIG_EXTS, 'glob');
}
protected function configureRoutes(RouteCollectionBuilder $routes)
{
$confDir = dirname($this->getRootDir()).'/etc';
$routes->import($confDir.'/routing/*'.self::CONFIG_EXTS, '/', 'glob');
$routes->import($confDir.'/routing/'.$this->getEnvironment().'/**/*'.self::CONFIG_EXTS, '/', 'glob');
$routes->import($confDir.'/routing'.self::CONFIG_EXTS, '/', 'glob');
}
} |