#php #symfony #glob
#php #symfony #глобальный
Вопрос:
Несколько лет назад Symfony представила глобальные шаблоны для импорта и загрузки файлов конфигурации. Вы можете увидеть пример этого в стандартном классе ядра
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');
}
Эти глобальные шаблоны расширяются, чтобы выглядеть следующим образом
$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}", ...
Это наводит на несколько вопросов. Прежде всего — что такое **
шаблон? Это не стандартная часть синтаксиса PHP glob. Я предполагаю, что по контексту это означает «все в этой папке и всех подпапках», но я не могу найти официальные документы по синтаксису Symfony glob, чтобы знать наверняка.
Другие вещи в шаблонах странные — например {routes}
. Обычно вы заключаете объекты в фигурные скобки, когда хотите сопоставить список — но здесь используются фигурные скобки только с одним элементом в списке, что заставляет меня думать, что я не понимаю, что происходит?
Когда я углубляюсь в исходный код, задействованные методы являются большими и не самыми интуитивно понятными для понимания.
Является ли синтаксис Symfony glob реализацией стандартного синтаксиса glob? Или это его собственная функция, и если да, то какие дополнительные функции у него есть помимо стандартных подстановочных знаков? (регулярные выражения? более специальные вещи, такие как **
? означает ли что-нибудь одно слово в фигурной скобке?)
Комментарии:
1. Это аналогично Bash с включенной
globstar
опцией. Итак,/path/to/symfony/config/{routes}/dev/**/*.{php,xml,yaml,yml}
перейдем кdev
каталогу и затем проведем поиск во всех подкаталогах для*.php
,*.xml
и т.д.2. Полезно, спасибо @miken32!