Reputation: 490
I wonder if possible to register custom service in symfony 3.4 MicroKernel app directly from AppKernel class by configureContainer method instead of loading all services from service.yml file.
Maybe by ContainerBuilder loadFromExtension method?
...
class AppKernel extends Kernel
{
use MicroKernelTrait;
public function registerBundles()
{
...
}
protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader)
{
$loader->load(__DIR__.'/config/config.yml');
$c->loadFromExtension('custom_service', [
...
]);
}
...
}
Upvotes: 0
Views: 376
Reputation: 2001
Working example:
<?php
use App\LoremIpsum;
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Routing\RouteCollectionBuilder;
require_once __DIR__ . '/../vendor/autoload.php';
class AppKernel extends Kernel {
use MicroKernelTrait;
public function registerBundles() {
return [
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
];
}
protected function configureRoutes(RouteCollectionBuilder $routes) {
$routes->add('/', 'kernel:exampleAction');
}
protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader) {
$c->loadFromExtension('framework', [
'secret' => 'r0tf1.XD',
]);
$c->register(LoremIpsum::class)->setArguments([123, 'ABC'])->setPublic(true);
}
public function exampleAction() {
$obj = $this->getContainer()->get(LoremIpsum::class);
return Response::create((string)$obj);
}
}
$kernel = new AppKernel('dev', true);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
See also: http://symfony.com/doc/3.4/service_container/definitions.html
Upvotes: 1