SlideShare a Scribd company logo
1 of 58
Download to read offline
5. sraz přátel Symfony - Kdo ví víc?
Praha, 18. 2. 2016, Vím Víc Hub
Martin Zeman
@zemistr
K Vašim službám!
Dnešní téma:
MicroKernel
(aneb špatný název pro Helper)
Co to, k*rva, je?
Micro + Kernel
Micro
Kernel
Anglický název kernel znamená (v překladu):
● jádro pecky
● zrno
● ztvrdlá dužina ovoce
https://cs.wikipedia.org/wiki/Jádro_operačního_systému
MicroKernel
=
malé jádro pecky
Chápou všichni?
Kernel
Jádro operačního systému (anglicky kernel) je v informatice
část
operačního systému, která je zavedena do operační paměti při
startu (bootování) počítače a je jí předáno řízení. U pokročilých
operačních systémů jádro nikdy neztrácí kontrolu nad počítačem
a po celou dobu jeho běhu koordinuje činnost všech spuštěných
procesů. Bla bla bla ...
https://cs.wikipedia.org/wiki/Jádro_operačního_systému
MicroKernel
Mikrojádro je v informatice typ jádra operačního systému, které je
velmi malé a obsahuje jen nejzákladnější funkce (typicky správu
paměti a podporu pro plánování procesů a meziprocesové
komunikace), čímž se minimalizuje objem běžícího kódu v
privilegovaném režimu. Bla bla bla ...
https://cs.wikipedia.org/wiki/Mikrojádro
Kernel(Symfony kernel)
Co to vlastně je ten Symfony Kernel?
MicroKernel(Symfony kernel)
Co to vlastně je ten Symfony MicroKernel?
MicroKernel(Symfony kernel)
MicroKernel(Symfony kernel)
http://symfony.com/blog/new-in-symfony-2-8-symfony-as-a-microframework
https://knpuniversity.com/screencast/new-in-symfony3/micro-kernel
// vendor/symfony/framework-bundle/Kernel/MicroKernelTrait.php
trait MicroKernelTrait {
abstract protected function configureRoutes(RouteCollectionBuilder $routes);
abstract protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader);
public function registerContainerConfiguration(LoaderInterface $loader) {
$loader->load(
function (ContainerBuilder $container) use ($loader) {
$container->loadFromExtension('framework', [
'router' => [
'resource' => 'kernel:loadRoutes',
'type' => 'service'
]
]
);
$this->configureContainer($container, $loader);
$container->addObjectResource($this);
}
);
}
public function loadRoutes(LoaderInterface $loader) {
$routes = new RouteCollectionBuilder($loader);
$this->configureRoutes($routes);
return $routes->build();
}
}
Ano, Trait je malý, ale to je asi vše...
{
"require": {
"symfony/framework-bundle": "3.0.*"
}
}
Pro použití stačí jen stáhnout symfony/framework-bundle
Složka “vendor”:
Složek: 486
Souborů: 2063
Velikost: 5.32 MB
Po stažení
// index.php
class LittleKernel extends Kernel {
use MicroKernelTrait;
public function registerBundles() {
return [
new FrameworkBundle()
];
}
protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader) {
$c->loadFromExtension('framework', ['secret' => 'James Bond 007']);
}
protected function configureRoutes(RouteCollectionBuilder $routes) {
$routes->add('/hello/{name}', 'Kernel:helloAction');
}
public function helloAction($name) {
return new Response("Hello $name");
}
}
$kernel = new LittleKernel('dev', true);
$kernel->loadClassCache();
$kernel->handle(Request::createFromGlobals())->send();
A přidat pár řádků do index.php
Tadá!
server.local/index.php/hello/007
// index.php
class LittleKernel extends Kernel {
use MicroKernelTrait;
public function registerBundles() {
return [
new FrameworkBundle(),
];
}
protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader) {
$c->loadFromExtension('framework', ['secret' => 'James Bond 007']);
}
protected function configureRoutes(RouteCollectionBuilder $routes) {
$routes->add('/hello/{name}', 'Kernel:helloAction');
}
public function helloAction($name) {
return new Response("Hello $name");
}
}
$kernel = new LittleKernel('dev', true);
$kernel->loadClassCache();
$kernel->handle(Request::createFromGlobals())->send();
"Hello $name"
A přidat pár řádků do index.php
+ Twig
{
"require": {
"symfony/framework-bundle": "3.0.*",
"symfony/twig-bundle": "3.0.*"
}
}
Pro použití stačí jen stáhnout symfony/twig-bundle
Složka “vendor”:
Složek: 638 (+152)
Souborů: 2859 (+796)
Velikost: 6.72 MB (+1.4)
Po stažení
// index.php
class LittleKernel extends Kernel {
...
public function registerBundles() {
return [
new FrameworkBundle(),
new TwigBundle()
];
}
protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader) {
$c->loadFromExtension(
'framework',
[
'secret' => 'James Bond 007',
'templating' => ['engines' => ['twig']]
]
);
}
...
public function helloAction($name) {
$twig = $this->getContainer()->get('twig');
$template = $twig->createTemplate('Hello {{ name }}');
$html = $template->render(['name' => $name]);
return new Response($html);
}
}
...
'Hello {{ name }}'
server.local/index.php/hello/007
+ Controllery
+ Šablony
{
"require": {
"symfony/framework-bundle": "3.0.*",
"symfony/twig-bundle": "3.0.*"
},
"autoload": {
"psr-4": {
"": "src/"
}
}
}
// src/AppBundle/AppBundle.php
<?php
namespace AppBundle;
use SymfonyComponentHttpKernelBundleBundle;
class AppBundle extends Bundle {
}
Bond komunikuje s M
// src/AppBundle/AppBundle.php
<?php
namespace AppBundle;
use SymfonyComponentHttpKernelBundleBundle;
class AppBundle extends Bundle {
}
// src/AppBundle/Controller/MController.php
<?php
namespace AppBundleController;
use SymfonyBundleFrameworkBundleControllerController;
class MController extends Controller {
public function helloAction($name) {
return $this->render('AppBundle:M:hello.html.twig', ['name' => $name]);
}
}
// src/AppBundle/Resources/views/M/hello.html.twig
Hello {{ name }}
// index.php
class LittleKernel extends Kernel {
use MicroKernelTrait;
public function registerBundles() {
return [
new FrameworkBundle(),
new TwigBundle(),
new AppBundle(),
];
}
protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader) {
$c->loadFromExtension(
'framework',
[
'secret' => 'James Bond 007',
'templating' => ['engines' => ['twig']]
]
);
}
protected function configureRoutes(RouteCollectionBuilder $routes) {
$routes->add('/hello/{name}', 'AppBundle:M:hello');
}
}
...
server.local/index.php/hello/007
+ Lepší routy
+ Lepší šablony
{
"require": {
"symfony/framework-bundle": "3.0.*",
"symfony/twig-bundle": "3.0.*",
"sensio/framework-extra-bundle": "3.0.*"
},
"autoload": {
"psr-4": {
"": "src/"
}
}
}
Pro použití stačí jen stáhnout sensio/framework-extra-bundle
Složka “vendor”:
Složek: 707 (+69)
Souborů: 3036 (+177)
Velikost: 7.28 MB (+0.56)
Po stažení
// src/AppBundle/Controller/MController.php
class MController extends Controller {
/**
* @Route("/hello/{name}")
* @Template()
*/
public function helloAction($name) {
return ['name' => $name];
}
}
// index.php
$loader = require __DIR__ . '/vendor/autoload.php';
AnnotationRegistry::registerLoader([$loader, 'loadClass']);
class LittleKernel extends Kernel {
use MicroKernelTrait;
public function registerBundles() {
return [
new FrameworkBundle(),
new TwigBundle(),
new SensioBundleFrameworkExtraBundleSensioFrameworkExtraBundle(),
new AppBundle(),
];
}
...
protected function configureRoutes(RouteCollectionBuilder $routes) {
$routes->import('@AppBundle/Controller', '/', 'annotation');
}
}
...
server.local/index.php/hello/007
Prosím!
Rozděl ten index!
// index.php
use DoctrineCommonAnnotationsAnnotationRegistry;
use SymfonyComponentHttpFoundationRequest;
$loader = require __DIR__ . '/vendor/autoload.php';
AnnotationRegistry::registerLoader([$loader, 'loadClass']);
require __DIR__ . '/LittleKernel.php';
$kernel = new LittleKernel('dev', true);
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);
<?php
// LittleKernel.php
...
class LittleKernel extends Kernel {
use MicroKernelTrait;
public function registerBundles() {
return [
new FrameworkBundle(),
new TwigBundle(),
new SensioBundleFrameworkExtraBundleSensioFrameworkExtraBundle(),
new AppBundle(),
];
}
protected function configureContainer(ContainerBuilder $c, LoaderInterface $loader) {
$c->loadFromExtension(
'framework',
[
'secret' => 'James Bond 007',
'templating' => ['engines' => ['twig']]
]
);
}
protected function configureRoutes(RouteCollectionBuilder $routes) {
$routes->import('@AppBundle/Controller', '/', 'annotation');
}
}
Výsledek (fujky):
Controllery: 0
Šablony: 0
Bundly: 1
Jiné soubory: 1 (index)
Výsledek (mňam):
Controllery: 1
Šablony: 1
Bundly: 4
Jiné soubory: 2 (index + LittleKernel)
Složka “vendor”:
Složek: 707
Souborů: 3036
Velikost: 7.28 MB
Micro?
MicroKernel(Symfony kernel)
KernelHelper?
+1
Hmmm, nejsem jediný, komu se ten název nelíbí.
Používat?
x
Nepoužívat?
Otázky?

More Related Content

What's hot

Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Péhápkaři
 
CRCE - přehled datového modelu a vybraná API
CRCE - přehled datového modelu a vybraná APICRCE - přehled datového modelu a vybraná API
CRCE - přehled datového modelu a vybraná APIPremek Brada
 
Vývoj aplikací pro iOS
Vývoj aplikací pro iOSVývoj aplikací pro iOS
Vývoj aplikací pro iOSPetr Dvorak
 
WebSockets - how to do real-time applications in PHP
WebSockets - how to do real-time applications in PHPWebSockets - how to do real-time applications in PHP
WebSockets - how to do real-time applications in PHPBrnoPHP
 
Czechitas - školení PHP/Symfony MicroKernel
Czechitas - školení PHP/Symfony MicroKernelCzechitas - školení PHP/Symfony MicroKernel
Czechitas - školení PHP/Symfony MicroKernelDennis Fridrich
 
Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?Bohdan Ganický
 

What's hot (10)

Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
Doctrine - Co dělat když entity nestačí [Filip Procházka] (7. sraz, Praha)
 
CRCE - přehled datového modelu a vybraná API
CRCE - přehled datového modelu a vybraná APICRCE - přehled datového modelu a vybraná API
CRCE - přehled datového modelu a vybraná API
 
Vývoj aplikací pro iOS
Vývoj aplikací pro iOSVývoj aplikací pro iOS
Vývoj aplikací pro iOS
 
WebSockets - how to do real-time applications in PHP
WebSockets - how to do real-time applications in PHPWebSockets - how to do real-time applications in PHP
WebSockets - how to do real-time applications in PHP
 
Czechitas - školení PHP/Symfony MicroKernel
Czechitas - školení PHP/Symfony MicroKernelCzechitas - školení PHP/Symfony MicroKernel
Czechitas - školení PHP/Symfony MicroKernel
 
Drupal Front-end
Drupal Front-endDrupal Front-end
Drupal Front-end
 
CQRS v rohlik.cz
CQRS v rohlik.czCQRS v rohlik.cz
CQRS v rohlik.cz
 
Kdyby/Redis
Kdyby/RedisKdyby/Redis
Kdyby/Redis
 
Django
DjangoDjango
Django
 
Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?
 

Viewers also liked

How to Post to Instagram from Hootsuite
How to Post to Instagram from HootsuiteHow to Post to Instagram from Hootsuite
How to Post to Instagram from Hootsuitebethgsanders
 
Google Analytics for Charities
Google Analytics for CharitiesGoogle Analytics for Charities
Google Analytics for CharitiesCliff Ashcroft
 
クマのプーさん原作沼へようこそ
クマのプーさん原作沼へようこそクマのプーさん原作沼へようこそ
クマのプーさん原作沼へようこそpoohya
 
Contents Page and DPS Analysis
Contents Page and DPS AnalysisContents Page and DPS Analysis
Contents Page and DPS Analysissewayne1254
 
Salesforce Google Maps Integration
Salesforce Google Maps IntegrationSalesforce Google Maps Integration
Salesforce Google Maps IntegrationCloud Analogy
 
INSTALACION DE DESAGUE-PROBLEMATICA Y SOLUCIONES
INSTALACION DE DESAGUE-PROBLEMATICA Y SOLUCIONESINSTALACION DE DESAGUE-PROBLEMATICA Y SOLUCIONES
INSTALACION DE DESAGUE-PROBLEMATICA Y SOLUCIONESJUAN CARLOS ALANOCA
 

Viewers also liked (11)

Resume
Resume Resume
Resume
 
How to Post to Instagram from Hootsuite
How to Post to Instagram from HootsuiteHow to Post to Instagram from Hootsuite
How to Post to Instagram from Hootsuite
 
Google Analytics for Charities
Google Analytics for CharitiesGoogle Analytics for Charities
Google Analytics for Charities
 
Richard dacoury
Richard dacouryRichard dacoury
Richard dacoury
 
Segmentación de-mercado
Segmentación de-mercadoSegmentación de-mercado
Segmentación de-mercado
 
クマのプーさん原作沼へようこそ
クマのプーさん原作沼へようこそクマのプーさん原作沼へようこそ
クマのプーさん原作沼へようこそ
 
Facial expressions
Facial expressionsFacial expressions
Facial expressions
 
Contents Page and DPS Analysis
Contents Page and DPS AnalysisContents Page and DPS Analysis
Contents Page and DPS Analysis
 
Salesforce Google Maps Integration
Salesforce Google Maps IntegrationSalesforce Google Maps Integration
Salesforce Google Maps Integration
 
INSTALACION DE DESAGUE-PROBLEMATICA Y SOLUCIONES
INSTALACION DE DESAGUE-PROBLEMATICA Y SOLUCIONESINSTALACION DE DESAGUE-PROBLEMATICA Y SOLUCIONES
INSTALACION DE DESAGUE-PROBLEMATICA Y SOLUCIONES
 
Instalaciones electricas
Instalaciones electricasInstalaciones electricas
Instalaciones electricas
 

Similar to MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)

MoroSystems na ostravském CZJUGu o Apache Wicket
MoroSystems na ostravském CZJUGu o Apache WicketMoroSystems na ostravském CZJUGu o Apache Wicket
MoroSystems na ostravském CZJUGu o Apache WicketTomáš Páral
 
Zmrakování pružné včely
Zmrakování pružné včelyZmrakování pružné včely
Zmrakování pružné včelyfersman
 
Czech and Slovak Sun Training Day 2007 - Solaris
Czech and Slovak Sun Training Day 2007 - SolarisCzech and Slovak Sun Training Day 2007 - Solaris
Czech and Slovak Sun Training Day 2007 - SolarisMartin Cerveny
 
Silex
SilexSilex
SilexKeyup
 
Rozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVCRozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVCtopascz
 
Lex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi
Lex Vjatkin + Ondřej procházka: Jak to děláme ve WikidiLex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi
Lex Vjatkin + Ondřej procházka: Jak to děláme ve WikidiDevelcz
 
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?Develcz
 
Technologie užívané při vývoji velkých e-shopů
Technologie užívané při vývoji velkých e-shopůTechnologie užívané při vývoji velkých e-shopů
Technologie užívané při vývoji velkých e-shopůPeckaDesign.cz
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integrationdanielkolman
 
Android Development for Phone and Tablet
Android Development for Phone and TabletAndroid Development for Phone and Tablet
Android Development for Phone and TabletTomáš Kypta
 
Slovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTraceSlovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTraceMartin Cerveny
 
Rozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVCRozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVCtopascz
 
Android nálevna (Czech / Android for beginners)
Android nálevna (Czech / Android for beginners)Android nálevna (Czech / Android for beginners)
Android nálevna (Czech / Android for beginners)pavelpetrek
 
Keyup presentation about Gulp
Keyup presentation about GulpKeyup presentation about Gulp
Keyup presentation about GulpKeyup
 
Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)
Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)
Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)Martin Hujer
 

Similar to MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze) (20)

MoroSystems na ostravském CZJUGu o Apache Wicket
MoroSystems na ostravském CZJUGu o Apache WicketMoroSystems na ostravském CZJUGu o Apache Wicket
MoroSystems na ostravském CZJUGu o Apache Wicket
 
Zmrakování pružné včely
Zmrakování pružné včelyZmrakování pružné včely
Zmrakování pružné včely
 
Czech and Slovak Sun Training Day 2007 - Solaris
Czech and Slovak Sun Training Day 2007 - SolarisCzech and Slovak Sun Training Day 2007 - Solaris
Czech and Slovak Sun Training Day 2007 - Solaris
 
201502.ReinIT.Dev
201502.ReinIT.Dev201502.ReinIT.Dev
201502.ReinIT.Dev
 
Silex
SilexSilex
Silex
 
Rozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVCRozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVC
 
Lex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi
Lex Vjatkin + Ondřej procházka: Jak to děláme ve WikidiLex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi
Lex Vjatkin + Ondřej procházka: Jak to děláme ve Wikidi
 
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?
 
Technologie užívané při vývoji velkých e-shopů
Technologie užívané při vývoji velkých e-shopůTechnologie užívané při vývoji velkých e-shopů
Technologie užívané při vývoji velkých e-shopů
 
Continuous Integration
Continuous IntegrationContinuous Integration
Continuous Integration
 
Android Development for Phone and Tablet
Android Development for Phone and TabletAndroid Development for Phone and Tablet
Android Development for Phone and Tablet
 
Slovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTraceSlovak Sun Training Day 2010 - DTrace
Slovak Sun Training Day 2010 - DTrace
 
Úvod do rails
Úvod do railsÚvod do rails
Úvod do rails
 
Mesour DataGrid
Mesour DataGridMesour DataGrid
Mesour DataGrid
 
Rozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVCRozšiřitelnost ASP.NET MVC
Rozšiřitelnost ASP.NET MVC
 
Android nálevna (Czech / Android for beginners)
Android nálevna (Czech / Android for beginners)Android nálevna (Czech / Android for beginners)
Android nálevna (Czech / Android for beginners)
 
Keyup presentation about Gulp
Keyup presentation about GulpKeyup presentation about Gulp
Keyup presentation about Gulp
 
Clean code
Clean codeClean code
Clean code
 
2 prz
 2 prz 2 prz
2 prz
 
Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)
Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)
Zend Framework 2.0 (ZFMeetup Praha 3.11.2011)
 

MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)

Editor's Notes

  1. https://cs.wikipedia.org/wiki/Jádro_operačního_systému
  2. https://cs.wikipedia.org/wiki/Jádro_operačního_systému
  3. https://cs.wikipedia.org/wiki/Mikrojádro
  4. Co to vlastně je ten Symfony Kernel?
  5. Co to vlastně je ten Symfony MicroKernel?
  6. http://symfony.com/blog/new-in-symfony-2-8-symfony-as-a-microframework https://knpuniversity.com/screencast/new-in-symfony3/micro-kernel
  7. Ano, Trait je malý, ale to je asi vše...
  8. Pro použití stačí jen stáhnout symfony/framework-bundle
  9. Po stažení
  10. A přidat pár řádků do index.php
  11. A přidat pár řádků do index.php
  12. Pro použití stačí jen stáhnout symfony/twig-bundle
  13. Po stažení
  14. Bond komunikuje s M
  15. Pro použití stačí jen stáhnout sensio/framework-extra-bundle
  16. Po stažení
  17. Hmmm, nejsem jediný, komu se ten název nelíbí.