几年前,Symfony引入了importing和loading配置文件的全局模式。您可以在股票内核类中看到一个示例
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 spelunking中the source code时,methods involved是大人物,并不是最直观的人。
Symfony的glob语法是否是标准glob语法的实现?还是它自己的事情?如果是这样,除了标准通配符之外,它还具有哪些其他功能? (正则表达式?更特殊的东西,例如**
?括号中的单个单词有什么意思吗?)