Successfully reported this slideshow.
Your SlideShare is downloading. ×

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

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Kdyby/Events #posobota
Kdyby/Events #posobota
Loading in …3
×

Check these out next

1 of 58 Ad
Advertisement

More Related Content

Advertisement

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

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

  1. 1. 5. sraz přátel Symfony - Kdo ví víc? Praha, 18. 2. 2016, Vím Víc Hub
  2. 2. Martin Zeman @zemistr K Vašim službám!
  3. 3. Dnešní téma: MicroKernel (aneb špatný název pro Helper)
  4. 4. Co to, k*rva, je?
  5. 5. Micro + Kernel
  6. 6. Micro
  7. 7. Kernel
  8. 8. 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
  9. 9. MicroKernel = malé jádro pecky
  10. 10. Chápou všichni?
  11. 11. Kernel
  12. 12. 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
  13. 13. MicroKernel
  14. 14. 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
  15. 15. Kernel(Symfony kernel) Co to vlastně je ten Symfony Kernel?
  16. 16. MicroKernel(Symfony kernel) Co to vlastně je ten Symfony MicroKernel?
  17. 17. MicroKernel(Symfony kernel)
  18. 18. 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
  19. 19. // 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...
  20. 20. { "require": { "symfony/framework-bundle": "3.0.*" } } Pro použití stačí jen stáhnout symfony/framework-bundle
  21. 21. Složka “vendor”: Složek: 486 Souborů: 2063 Velikost: 5.32 MB Po stažení
  22. 22. // 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
  23. 23. Tadá!
  24. 24. server.local/index.php/hello/007
  25. 25. // 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
  26. 26. + Twig
  27. 27. { "require": { "symfony/framework-bundle": "3.0.*", "symfony/twig-bundle": "3.0.*" } } Pro použití stačí jen stáhnout symfony/twig-bundle
  28. 28. Složka “vendor”: Složek: 638 (+152) Souborů: 2859 (+796) Velikost: 6.72 MB (+1.4) Po stažení
  29. 29. // 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 }}'
  30. 30. server.local/index.php/hello/007
  31. 31. + Controllery + Šablony
  32. 32. { "require": { "symfony/framework-bundle": "3.0.*", "symfony/twig-bundle": "3.0.*" }, "autoload": { "psr-4": { "": "src/" } } }
  33. 33. // src/AppBundle/AppBundle.php <?php namespace AppBundle; use SymfonyComponentHttpKernelBundleBundle; class AppBundle extends Bundle { }
  34. 34. Bond komunikuje s M
  35. 35. // 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 }}
  36. 36. // 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'); } } ...
  37. 37. server.local/index.php/hello/007
  38. 38. + Lepší routy + Lepší šablony
  39. 39. { "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
  40. 40. Složka “vendor”: Složek: 707 (+69) Souborů: 3036 (+177) Velikost: 7.28 MB (+0.56) Po stažení
  41. 41. // src/AppBundle/Controller/MController.php class MController extends Controller { /** * @Route("/hello/{name}") * @Template() */ public function helloAction($name) { return ['name' => $name]; } }
  42. 42. // 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'); } } ...
  43. 43. server.local/index.php/hello/007
  44. 44. Prosím! Rozděl ten index!
  45. 45. // 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);
  46. 46. <?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'); } }
  47. 47. Výsledek (fujky): Controllery: 0 Šablony: 0 Bundly: 1 Jiné soubory: 1 (index)
  48. 48. Výsledek (mňam): Controllery: 1 Šablony: 1 Bundly: 4 Jiné soubory: 2 (index + LittleKernel)
  49. 49. Složka “vendor”: Složek: 707 Souborů: 3036 Velikost: 7.28 MB
  50. 50. Micro?
  51. 51. MicroKernel(Symfony kernel)
  52. 52. KernelHelper?
  53. 53. +1
  54. 54. Hmmm, nejsem jediný, komu se ten název nelíbí.
  55. 55. Používat? x Nepoužívat?
  56. 56. Otázky?

Editor's Notes

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

×