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');
    }
}