New in Symfony 3.3: Load config files with glob patterns
March 24, 2017 • Published by Javier Eguiluz
Warning: This post is about an unsupported Symfony version. Some of this information may be out of date. Read the most recent Symfony Docs.
Contributed by
Fabien Potencier
in #21635.
A few weeks ago, we published an article about importing files with glob patterns in Symfony 3.3. The response from the community was so enthusiastic that we decided to improve and generalize the support of glob patterns in the framework.
The previous feature allowed to use glob patterns only when importing files and it was restricted to the files used in the container, so you couldn't use it in routing files.
This new feature moves all the glob pattern logic to the Config component and
adds a new GlobFileLoader
class that actually loads files using glob
patterns. Moreover, this new loader is registered for both the routing and
container file loaders.
The following example, extracted from the Kernel
class used in the
soon-to-be-unveiled "Symfony Flex" project, shows this new glob file loader used
inside a Symfony micro kernel:
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');
}
}
Help the Symfony project!
As with any Open-Source project, contributing code or documentation is the most common way to help, but we also have a wide range of sponsoring opportunities.
Comments are closed.
To ensure that comments stay relevant, they are closed for old posts.