added a micro kernel
This commit is contained in:
parent
69af9eac35
commit
eab0f0a4f4
@ -0,0 +1,87 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Bundle\FrameworkBundle\Kernel;
|
||||
|
||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\Routing\RouteCollectionBuilder;
|
||||
|
||||
/**
|
||||
* A Kernel that provides configuration hooks.
|
||||
*
|
||||
* @author Ryan Weaver <ryan@knpuniversity.com>
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
*/
|
||||
trait MicroKernelTrait
|
||||
{
|
||||
/**
|
||||
* Add or import routes into your application.
|
||||
*
|
||||
* $routes->import('config/routing.yml');
|
||||
* $routes->add('/admin', 'AppBundle:Admin:dashboard', 'admin_dashboard');
|
||||
*
|
||||
* @param RouteCollectionBuilder $routes
|
||||
*/
|
||||
abstract protected function configureRoutes(RouteCollectionBuilder $routes);
|
||||
|
||||
/**
|
||||
* Configures the container.
|
||||
*
|
||||
* You can register extensions:
|
||||
*
|
||||
* $c->loadFromExtension('framework', array(
|
||||
* 'secret' => '%secret%'
|
||||
* ));
|
||||
*
|
||||
* Or services:
|
||||
*
|
||||
* $c->register('halloween', 'FooBundle\HalloweenProvider');
|
||||
*
|
||||
* Or parameters:
|
||||
*
|
||||
* $c->setParameter('halloween', 'lot of fun');
|
||||
*
|
||||
* @param ContainerBuilder $c
|
||||
* @param LoaderInterface $loader
|
||||
*/
|
||||
abstract protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader);
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function registerContainerConfiguration(LoaderInterface $loader)
|
||||
{
|
||||
$loader->load(function (ContainerBuilder $container) use ($loader) {
|
||||
$container->loadFromExtension('framework', array(
|
||||
'router' => array(
|
||||
'resource' => 'kernel:loadRoutes',
|
||||
'type' => 'service',
|
||||
),
|
||||
));
|
||||
|
||||
$this->configureContainer($container, $loader);
|
||||
|
||||
$container->addObjectResource($this);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
public function loadRoutes(LoaderInterface $loader)
|
||||
{
|
||||
$routes = new RouteCollectionBuilder($loader);
|
||||
$this->configureRoutes($routes);
|
||||
|
||||
return $routes->build();
|
||||
}
|
||||
}
|
@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Bundle\FrameworkBundle\Tests\Kernel;
|
||||
|
||||
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
|
||||
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
|
||||
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpKernel\Kernel;
|
||||
use Symfony\Component\Routing\RouteCollectionBuilder;
|
||||
|
||||
class ConcreteMicroKernel extends Kernel
|
||||
{
|
||||
use MicroKernelTrait;
|
||||
|
||||
private $cacheDir;
|
||||
|
||||
public function halloweenAction()
|
||||
{
|
||||
return new Response('halloween');
|
||||
}
|
||||
|
||||
public function registerBundles()
|
||||
{
|
||||
return array(
|
||||
new FrameworkBundle(),
|
||||
);
|
||||
}
|
||||
|
||||
public function getCacheDir()
|
||||
{
|
||||
return $this->cacheDir = sys_get_temp_dir().'/sf_micro_kernel';
|
||||
}
|
||||
|
||||
public function getLogDir()
|
||||
{
|
||||
return $this->cacheDir;
|
||||
}
|
||||
|
||||
public function __destruct()
|
||||
{
|
||||
$fs = new Filesystem();
|
||||
$fs->remove($this->cacheDir);
|
||||
}
|
||||
|
||||
protected function configureRoutes(RouteCollectionBuilder $routes)
|
||||
{
|
||||
$routes->add('/', 'kernel:halloweenAction');
|
||||
}
|
||||
|
||||
protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader)
|
||||
{
|
||||
$c->loadFromExtension('framework', array(
|
||||
'secret' => '$ecret',
|
||||
));
|
||||
|
||||
$c->setParameter('halloween', 'Have a great day!');
|
||||
$c->register('halloween', 'stdClass');
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Bundle\FrameworkBundle\Tests\Kernel;
|
||||
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
||||
class MicroKernelTraitTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* @requires PHP 5.4
|
||||
*/
|
||||
public function test()
|
||||
{
|
||||
$kernel = new ConcreteMicroKernel('test', true);
|
||||
$kernel->boot();
|
||||
|
||||
$request = Request::create('/');
|
||||
$response = $kernel->handle($request);
|
||||
|
||||
$this->assertEquals('halloween', $response->getContent());
|
||||
$this->assertEquals('Have a great day!', $kernel->getContainer()->getParameter('halloween'));
|
||||
$this->assertInstanceOf('stdClass', $kernel->getContainer()->get('halloween'));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user