Symfony Glob模式中**(和其他符号)的含义

时间:2019-04-06 22:52:25

标签: php symfony glob

几年前,Symfony引入了importingloading配置文件的全局模式。您可以在股票内核类中看到一个示例

protected function configureRoutes(RouteCollectionBuilder $routes): void
{
    $confDir = $this->getProjectDir() . '/config';

    $routes->import($confDir . '/{routes}/*' . self::CONFIG_EXTS, '/', 'glob');
    $routes->import($confDir . '/{routes}/' . $this->environment . '/**/*' . self::CONFIG_EXTS, '/', 'glob');
    $routes->import($confDir . '/{routes}' . self::CONFIG_EXTS, '/', 'glob');
}

这些glob模式扩展成这样

$routes->import("/path/to/symfony/config/{routes}/*.{php,xml,yaml,yml}", ...
$routes->import("/path/to/symfony/config/{routes}/dev/**/*.{php,xml,yaml,yml}", ...
$routes->import("/path/to/symfony/config/{routes}.{php,xml,yaml,yml}", ...

这使我想到了一些问题。首先-**模式是什么?那不是标准的part of PHP's glob语法。我以上下文为前提,它的意思是“此文件夹中的所有内容和所有子文件夹”,但是我无法确定关于Symfony的glob语法的官方文档。

关于模式的其他事情很奇怪-例如{routes}。通常,当您想与列表匹配时,您可以将它们放在大括号中-但这只使用列表中只有一项的大括号,这让我觉得我不了解发生了什么事。

当我在go spelunkingthe source code时,methods involved是大人物,并不是最直观的人。

Symfony的glob语法是否是标准glob语法的实现?还是它自己的事情?如果是这样,除了标准通配符之外,它还具有哪些其他功能? (正则表达式?更特殊的东西,例如**?括号中的单个单词有什么意思吗?)

0 个答案:

没有答案