Symfony4 support
This commit is contained in:
25
README.md
25
README.md
@@ -27,4 +27,29 @@ ensures that application behaviour will not be affected by stateful services.
|
||||
FriendsOfBehat\SymfonyExtension: ~
|
||||
```
|
||||
|
||||
**Symfony 3 configuration**
|
||||
|
||||
```
|
||||
FriendsOfBehat\SymfonyExtension:
|
||||
kernel:
|
||||
bootstrap: 'var/bootstrap.php.cache'
|
||||
path: app/AppKernel.php
|
||||
class: 'AppKernel'
|
||||
env: test
|
||||
debug: true
|
||||
```
|
||||
|
||||
**Symfony 4 configuration**
|
||||
|
||||
```
|
||||
FriendsOfBehat\SymfonyExtension:
|
||||
env_file: .env
|
||||
kernel:
|
||||
class: 'MyTrip\Kernel'
|
||||
path: src/Kernel.php
|
||||
debug: true
|
||||
```
|
||||
|
||||
Symfony 4 does not have bootstrap file anymore and the environment is configured in the .env file.
|
||||
|
||||
3. Good luck & have fun!
|
||||
|
||||
@@ -13,7 +13,8 @@
|
||||
"php": "^7.1",
|
||||
|
||||
"behat/behat": "^3.1",
|
||||
"symfony/http-kernel": "^3.3|^4.0"
|
||||
"symfony/http-kernel": "^3.3|^4.0",
|
||||
"symfony/dotenv": "^4.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"behat/mink": "^1.7",
|
||||
|
||||
@@ -56,3 +56,35 @@ Feature: Not crashing Behat
|
||||
And a feature file with passing scenario
|
||||
When I run Behat
|
||||
Then it should pass
|
||||
|
||||
Scenario: This extension boot a Symfony4 kernel
|
||||
Given a Behat configuration containing:
|
||||
"""
|
||||
default:
|
||||
extensions:
|
||||
FriendsOfBehat\SymfonyExtension:
|
||||
env_file: .env_in_memory
|
||||
kernel:
|
||||
path: src/MyKernel.php
|
||||
class: MyKernel
|
||||
"""
|
||||
And a file ".env_in_memory" containing:
|
||||
"""
|
||||
APP_ENV=dev
|
||||
"""
|
||||
And a file "src/MyKernel.php" containing:
|
||||
"""
|
||||
<?php
|
||||
|
||||
use Symfony\Component\HttpKernel\Kernel;
|
||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||
|
||||
class MyKernel extends Kernel
|
||||
{
|
||||
public function registerBundles() { return []; }
|
||||
public function registerContainerConfiguration(LoaderInterface $loader) {}
|
||||
}
|
||||
"""
|
||||
And a feature file with passing scenario
|
||||
When I run Behat
|
||||
Then it should pass
|
||||
|
||||
@@ -27,6 +27,7 @@ use Symfony\Component\DependencyInjection\Container;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\Definition;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
use Symfony\Component\Dotenv\Dotenv;
|
||||
|
||||
final class SymfonyExtension implements Extension
|
||||
{
|
||||
@@ -90,6 +91,7 @@ final class SymfonyExtension implements Extension
|
||||
$builder
|
||||
->addDefaultsIfNotSet()
|
||||
->children()
|
||||
->scalarNode('env_file')->defaultNull()->end()
|
||||
->arrayNode('kernel')
|
||||
->addDefaultsIfNotSet()
|
||||
->children()
|
||||
@@ -110,6 +112,15 @@ final class SymfonyExtension implements Extension
|
||||
*/
|
||||
public function load(ContainerBuilder $container, array $config): void
|
||||
{
|
||||
if (null !== $config['env_file']) {
|
||||
$this->loadEnvVars($container, $config['env_file']);
|
||||
|
||||
$environment = getenv('APP_ENV');
|
||||
$config['kernel']['env'] = $environment ?? 'test';
|
||||
} else {
|
||||
$this->requireKernelBootstrapFile($container->getParameter('paths.base'), $config['bootstrap']);
|
||||
}
|
||||
|
||||
$this->loadKernel($container, $config['kernel']);
|
||||
$this->loadKernelContainer($container);
|
||||
|
||||
@@ -129,6 +140,16 @@ final class SymfonyExtension implements Extension
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ContainerBuilder $container
|
||||
* @param string $fileName
|
||||
*/
|
||||
private function loadEnvVars(ContainerBuilder $container, string $fileName): void
|
||||
{
|
||||
$envFilePath = sprintf('%s/%s', $container->getParameter('paths.base'), $fileName);
|
||||
(new Dotenv())->load($envFilePath);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ContainerBuilder $container
|
||||
*/
|
||||
@@ -142,8 +163,6 @@ final class SymfonyExtension implements Extension
|
||||
$definition->setFile($this->getKernelFile($container->getParameter('paths.base'), $config['path']));
|
||||
|
||||
$container->setDefinition(self::KERNEL_ID, $definition);
|
||||
|
||||
$this->requireKernelBootstrapFile($container->getParameter('paths.base'), $config['bootstrap']);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -203,6 +222,8 @@ final class SymfonyExtension implements Extension
|
||||
|
||||
/**
|
||||
* @param ContainerBuilder $container
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
private function declareSymfonyContainers(ContainerBuilder $container): void
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user