SlideShare una empresa de Scribd logo
1 de 72
Descargar para leer sin conexión
Who am I?


          Raúl Fraile

           @raulfraile

PHP/Symfony2 freelance developer
What do I do?
SensioLabsConnect
Why?
app[_dev].php




Front controller
app[_dev].php

// web/app[_env].php

1. require_once __DIR__.'/../app/bootstrap.php.cache';
2. require_once __DIR__.'/../app/AppKernel.php';

3. use SymfonyComponentHttpFoundationRequest;

4. $kernel = new AppKernel('dev', true);
5. $kernel->loadClassCache();
6. $kernel->handle(Request::createFromGlobals())->send();
bootstrap.php.cache



Several classes/interfaces
     in the same file
bootstrap.php.cache
// app/bootstrap.php.cache

namespace { require_once __DIR__.'/autoload.php'; }

namespace SymfonyComponentDependencyInjection
{
  interface ContainerAwareInterface
  {
          function setContainer(ContainerInterface $container = null);
    }
    ...
}
bootstrap.php.cache




Reduces I/O operations
bootstrap.php.cache




Loads autoload.php
autoload.php
// app/autoload.php

use SymfonyComponentClassLoaderUniversalClassLoader;

$loader = new UniversalClassLoader();
$loader->registerNamespaces(array(
    'Symfony' => array(
       __DIR__.'/../vendor/symfony/src',
       __DIR__.'/../vendor/bundles'),
    'Assetic' => __DIR__.'/../vendor/assetic/src',
));
$loader->registerPrefixes(array(
    'Twig_' => __DIR__.'/../vendor/twig/lib',
));
ClassLoader


  Autoloading of
classes/interfaces in
     Symfony2
ClassLoader
ClassLoader




Implements PSR-0
PSR-0
    Approved by the “Framework Interop
                  Group”




github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md
PSR-0

Fully Qualified Name
                   SymfonyCoreRequest
                     ZendMailMessage


             [vendor_path]/Symfony/Core/Request.php
               [vendor_path]/Zend/Mail/Message.php


    Filesystem
ClassLoader
// namespaced class name
$namespace = substr($class, 0, $pos);
foreach ($this->namespaces as $ns => $dirs) {
   if (0 !== strpos($namespace, $ns)) {
       continue;
   }
    foreach ($dirs as $dir) {
       $className = substr($class, $pos + 1);
       $file = $dir . DIR_SEPARATOR .
           str_replace('',DIR_SEPARATOR, $namespace) .
           DIR_SEPARATOR .
           str_replace('_', DIR_SEPARATOR, $className) . '.php';
       if (file_exists($file)) {
           return $file;
       }
    }
}
ClassLoader

 $loader->findFile(
    'SymfonyComponentHttpFoundationRequest'
 );




/Sites/desymfony/app/../vendor/symfony/src/
   Symfony/Component/HttpFoundation/Request.php
app[_dev].php

// web/app[_env].php

1. require_once __DIR__.'/../app/bootstrap.php.cache';
2. require_once __DIR__.'/../app/AppKernel.php';

3. use SymfonyComponentHttpFoundationRequest;

4. $kernel = new AppKernel('dev', true);
5. $kernel->loadClassCache();
6. $kernel->handle(Request::createFromGlobals())->send();
AppKernel.php
// src/AppKernel.php

use SymfonyComponentHttpKernelKernel;
use SymfonyComponentConfigLoaderLoaderInterface;

class AppKernel extends Kernel
{
   public function registerBundles()
   {
     $bundles = array(
        new SymfonyBundleTwigBundleTwigBundle(),
        ...
     );
     return $bundles;
   }

    public function registerContainerConfiguration(LoaderInterface $loader)
    {
      $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
    }
}
app[_dev].php

// web/app[_env].php

1. require_once __DIR__.'/../app/bootstrap.php.cache';
2. require_once __DIR__.'/../app/AppKernel.php';

3. use SymfonyComponentHttpFoundationRequest;

4. $kernel = new AppKernel('dev', true);
5. $kernel->loadClassCache();
6. $kernel->handle(Request::createFromGlobals())->send();

                                          Debug
                                  Environment
AppKernel.php
If (true === $debug) {
       Saves initial time (microtime)
       display_errors = 1
       error_reporting = -1
       DebugUniversalClassLoader
} else {
       display_errors = 0
}
app[_dev].php

// web/app[_env].php

1. require_once __DIR__.'/../app/bootstrap.php.cache';
2. require_once __DIR__.'/../app/AppKernel.php';

3. use SymfonyComponentHttpFoundationRequest;

4. $kernel = new AppKernel('dev', true);
5. $kernel->loadClassCache();
6. $kernel->handle(Request::createFromGlobals())->send();
LoadClassCache


   Objective: map
  FQN/filenames of
classes and interfaces
LoadClassCache


 It is cached in
classes.map and
classes.php.meta
app[_dev].php

// web/app[_env].php

1. require_once __DIR__.'/../app/bootstrap.php.cache';
2. require_once __DIR__.'/../app/AppKernel.php';

3. use SymfonyComponentHttpFoundationRequest;

4. $kernel = new AppKernel('dev', true);
5. $kernel->loadClassCache();
6. $kernel->handle(Request::createFromGlobals())->send();
Request



HttpFoundation
  Component
Request



OO abstraction of a
  HTTP request
Request


                                          Request
GET /index.php HTTP/1.1␍␊
Host: test.com␍␊              $_GET
                                           query
Accept-Language:en;q=0.8␍␊
                                          request
Accept-Encoding:gzip␍␊        $_POST
                                          cookies
User-Agent: Mozilla/5.0␍␊
␍␊                                          files
                             $_COOKIE
                                           server
                                          headers
                              $_FILES
                                          getHost
                             $_SERVER
                                         getClientIp
                                             ...
app[_dev].php

// web/app[_env].php

1. require_once __DIR__.'/../app/bootstrap.php.cache';
2. require_once __DIR__.'/../app/AppKernel.php';

3. use SymfonyComponentHttpFoundationRequest;

4. $kernel = new AppKernel('dev', true);
5. $kernel->loadClassCache();
6. $kernel->handle(Request::createFromGlobals())->send();
HttpKernel

 Wrapper on top of
Request/Response to
handle the dynamic
   part of HTTP
HttpKernel


     Handles an
environment consisting
  of bundles, DIC...
$kernel->boot()



   Initialize
bundles and DIC
$kernel->initializeBundles()



Loads bundles defined in
AppKernel::registerBundles()
$kernel->initializeContainer()


   Generated using the
  ContainerBuilder from
  DependencyInjection
ContainerBuilder

// example.com/src/container.php
use SymfonyComponentDependencyInjection;
use SymfonyComponentDependencyInjectionReference;

$sc = new DependencyInjectionContainerBuilder();
$sc->register('context', 'SymfonyComponentRoutingRequestContext');
$sc->register('matcher', 'SymfonyComponentRoutingMatcherUrlMatcher')
   ->setArguments(array($routes, new Reference('context')));

$sc->register('framework', 'SimplexFramework')
   ->setArguments(array(new Reference('dispatcher'), new
Reference('resolver'))) ;
 http://fabien.potencier.org/article/62/create-your-own-framework-on-top-of-the-symfony2-components-part-12
$kernel->initializeContainer()



  {rootDir}{Environment}
 [Debug]ProjectContainer
$kernel->initializeContainer()

     For each bundle,
Bundle::build() method is
 executed and extensions
         are loaded
$kernel->boot()

  For each bundle, the
container is injected and
  the boot() method is
       executed
$kernel->handle()



Goal: Return a Response
        object
Event kernel.request



Dispatched as soon as
 the request arrives
Event kernel.request


Any listener can return
a Response and 'end'
    the execution
Event kernel.request


       Used by
FrameworkBundle to set
 the _controller value
RouterListener


Uses a RouterMatcher
(autogenerated by the
Routing component)
RouterListener
// app/cache/dev/appdevUrlMatcher.php

class appdevUrlMatcher extends RedirectableUrlMatcher
{
   ...
   public function match($pathinfo)
   {
       ...
       // _demo_hello
       if (0 === strpos($pathinfo, '/demo/hello') &&
           preg_match('#^/demo/hello/(?P<name>[^/]+?)$#s', $pathinfo, $m)) {
           return array_merge($this->mergeDefaults($m, array(
            '_controller' => 'AcmeDemoBundleControllerDemoController::helloAction')
            ), array( '_route' => '_demo_hello'));
      }
      ...
  }
ControllerResolver


Must return the controller
   + arguments from
       _controller
FrameworkBundle


  Ties components and
libraries together to make
   a MVC framework
FrameworkBundle




Moreover...
FrameworkBundle




php app/console
FrameworkBundle
// app/console

#!/usr/bin/env php
<?php

require_once __DIR__.'/bootstrap.php.cache';
require_once __DIR__.'/AppKernel.php';

use SymfonyBundleFrameworkBundleConsoleApplication;
use SymfonyComponentConsoleInputArgvInput;

$input = new ArgvInput();
$env = $input->getParameterOption(array('--env', '-e'), getenv('SYMFONY_ENV') ?: 'dev');
$debug = !$input->hasParameterOption(array('--no-debug', ''));

$kernel = new AppKernel($env, $debug);
$application = new Application($kernel);
$application->run();
FrameworkBundle

Commands
   assets:install
    cache:clear
  cache:warmup
 container:debug
router:dump-apache
   router:debug
FrameworkBundle




Base Controller
FrameworkBundle

// src/Acme/DemoBundle/Controller/DemoController

namespace AcmeDemoBundleController;

use SymfonyBundleFrameworkBundleControllerController;

class DemoController extends Controller
{
   public function helloAction($name)
   {
      ...
   }
}
FrameworkBundle


And much more: ESI,
   WebTestCase,
 DataCollectors...
Event kernel.controller


Once the controller has
  been resolved, this
  event is generated
Event kernel.controller


 Any listener can
 manipulate the
Controller callable
Event kernel.view


This event is called only
 if the Controller does
not return a Response
Event kernel.view


Goal: build a Response
object from the return
value of the Controller
Event kernel.response


  Allows to modify or
replace the Response
object after its creation
Event kernel.exception


Last change to convert a
   Exception into a
   Response object
Events


Extend from KernelEvent

getRequestType(): MASTER_REQUEST or SUB_REQUEST
getKernel();
getRequest();
Response

Response
              HTTP/1.1 200 OK
 Headers      Content-type: text/html
              Date:Thu, 31 May 2012 17:54:50 GMT
 Version

 Content      <!DOCTYPE HTML>
              <html lang="es">
                <head>
Status code
                  <meta charset="utf-8">
                  ...
Status text

 Charset
app[_dev].php

// web/app[_env].php

1. require_once __DIR__.'/../app/bootstrap.php.cache';
2. require_once __DIR__.'/../app/AppKernel.php';

3. use SymfonyComponentHttpFoundationRequest;

4. $kernel = new AppKernel('dev', true);
5. $kernel->loadClassCache();
6. $kernel->handle(Request::createFromGlobals())->send();
Response::send()



Send headers and
    content
Response::send()
Demo



https://github.com/raulfraile/
  internals-desymfony2012
¡Thank you!
Photos


http://www.flickr.com/photos/connectirmeli/7233514862

 http://www.flickr.com/photos/barretthall/6070677596

http://www.flickr.com/photos/f-oxymoron/5005673112/
Questions?

Más contenido relacionado

La actualidad más candente

Symfony Components 2.0 on PHP 5.3
Symfony Components 2.0 on PHP 5.3Symfony Components 2.0 on PHP 5.3
Symfony Components 2.0 on PHP 5.3
Fabien Potencier
 
Keeping it small: Getting to know the Slim micro framework
Keeping it small: Getting to know the Slim micro frameworkKeeping it small: Getting to know the Slim micro framework
Keeping it small: Getting to know the Slim micro framework
Jeremy Kendall
 
Keeping it Small: Getting to know the Slim Micro Framework
Keeping it Small: Getting to know the Slim Micro FrameworkKeeping it Small: Getting to know the Slim Micro Framework
Keeping it Small: Getting to know the Slim Micro Framework
Jeremy Kendall
 
Silex: From nothing to an API
Silex: From nothing to an APISilex: From nothing to an API
Silex: From nothing to an API
chrisdkemper
 
Bullet: The Functional PHP Micro-Framework
Bullet: The Functional PHP Micro-FrameworkBullet: The Functional PHP Micro-Framework
Bullet: The Functional PHP Micro-Framework
Vance Lucas
 
Symfony2 Introduction Presentation
Symfony2 Introduction PresentationSymfony2 Introduction Presentation
Symfony2 Introduction Presentation
Nerd Tzanetopoulos
 

La actualidad más candente (20)

Symfony Components 2.0 on PHP 5.3
Symfony Components 2.0 on PHP 5.3Symfony Components 2.0 on PHP 5.3
Symfony Components 2.0 on PHP 5.3
 
The Coolest Symfony Components you’ve never heard of - DrupalCon 2017
The Coolest Symfony Components you’ve never heard of - DrupalCon 2017The Coolest Symfony Components you’ve never heard of - DrupalCon 2017
The Coolest Symfony Components you’ve never heard of - DrupalCon 2017
 
Keeping it small: Getting to know the Slim micro framework
Keeping it small: Getting to know the Slim micro frameworkKeeping it small: Getting to know the Slim micro framework
Keeping it small: Getting to know the Slim micro framework
 
Keeping it Small: Getting to know the Slim Micro Framework
Keeping it Small: Getting to know the Slim Micro FrameworkKeeping it Small: Getting to know the Slim Micro Framework
Keeping it Small: Getting to know the Slim Micro Framework
 
Hands-on with the Symfony2 Framework
Hands-on with the Symfony2 FrameworkHands-on with the Symfony2 Framework
Hands-on with the Symfony2 Framework
 
A dive into Symfony 4
A dive into Symfony 4A dive into Symfony 4
A dive into Symfony 4
 
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years laterSymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
SymfonyCon Berlin 2016 - Symfony Plugin for PhpStorm - 3 years later
 
Keeping it small - Getting to know the Slim PHP micro framework
Keeping it small - Getting to know the Slim PHP micro frameworkKeeping it small - Getting to know the Slim PHP micro framework
Keeping it small - Getting to know the Slim PHP micro framework
 
ReactPHP
ReactPHPReactPHP
ReactPHP
 
Php introduction
Php introductionPhp introduction
Php introduction
 
Silex: From nothing to an API
Silex: From nothing to an APISilex: From nothing to an API
Silex: From nothing to an API
 
Bullet: The Functional PHP Micro-Framework
Bullet: The Functional PHP Micro-FrameworkBullet: The Functional PHP Micro-Framework
Bullet: The Functional PHP Micro-Framework
 
Effective Doctrine2: Performance Tips for Symfony2 Developers
Effective Doctrine2: Performance Tips for Symfony2 DevelopersEffective Doctrine2: Performance Tips for Symfony2 Developers
Effective Doctrine2: Performance Tips for Symfony2 Developers
 
Slim RedBeanPHP and Knockout
Slim RedBeanPHP and KnockoutSlim RedBeanPHP and Knockout
Slim RedBeanPHP and Knockout
 
Building Modern and Secure PHP Applications – Codementor Office Hours with Be...
Building Modern and Secure PHP Applications – Codementor Office Hours with Be...Building Modern and Secure PHP Applications – Codementor Office Hours with Be...
Building Modern and Secure PHP Applications – Codementor Office Hours with Be...
 
Developing apps using Perl
Developing apps using PerlDeveloping apps using Perl
Developing apps using Perl
 
Symfony2 Introduction Presentation
Symfony2 Introduction PresentationSymfony2 Introduction Presentation
Symfony2 Introduction Presentation
 
Symfony console: build awesome command line scripts with ease
Symfony console: build awesome command line scripts with easeSymfony console: build awesome command line scripts with ease
Symfony console: build awesome command line scripts with ease
 
The Naked Bundle - Symfony Barcelona
The Naked Bundle - Symfony BarcelonaThe Naked Bundle - Symfony Barcelona
The Naked Bundle - Symfony Barcelona
 
Scaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
Scaling Symfony2 apps with RabbitMQ - Symfony UK MeetupScaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
Scaling Symfony2 apps with RabbitMQ - Symfony UK Meetup
 

Similar a Symfony internals [english]

Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friends
Michael Peacock
 
symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207
patter
 
Beyond symfony 1.2 (Symfony Camp 2008)
Beyond symfony 1.2 (Symfony Camp 2008)Beyond symfony 1.2 (Symfony Camp 2008)
Beyond symfony 1.2 (Symfony Camp 2008)
Fabien Potencier
 
Dependency injection in Drupal 8
Dependency injection in Drupal 8Dependency injection in Drupal 8
Dependency injection in Drupal 8
Alexei Gorobets
 
What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012
D
 

Similar a Symfony internals [english] (20)

Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friends
 
Filesystem abstractions and msg queue sergeev - symfony camp 2018
Filesystem abstractions and msg queue   sergeev - symfony camp 2018Filesystem abstractions and msg queue   sergeev - symfony camp 2018
Filesystem abstractions and msg queue sergeev - symfony camp 2018
 
Symfony components in the wild, PHPNW12
Symfony components in the wild, PHPNW12Symfony components in the wild, PHPNW12
Symfony components in the wild, PHPNW12
 
Symfony2, creare bundle e valore per il cliente
Symfony2, creare bundle e valore per il clienteSymfony2, creare bundle e valore per il cliente
Symfony2, creare bundle e valore per il cliente
 
Forget about Index.php and build you applications around HTTP - PHPers Cracow
Forget about Index.php and build you applications around HTTP - PHPers CracowForget about Index.php and build you applications around HTTP - PHPers Cracow
Forget about Index.php and build you applications around HTTP - PHPers Cracow
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC Framework
 
Forget about index.php and build you applications around HTTP!
Forget about index.php and build you applications around HTTP!Forget about index.php and build you applications around HTTP!
Forget about index.php and build you applications around HTTP!
 
symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207
 
Beyond symfony 1.2 (Symfony Camp 2008)
Beyond symfony 1.2 (Symfony Camp 2008)Beyond symfony 1.2 (Symfony Camp 2008)
Beyond symfony 1.2 (Symfony Camp 2008)
 
Silex Cheat Sheet
Silex Cheat SheetSilex Cheat Sheet
Silex Cheat Sheet
 
Silex Cheat Sheet
Silex Cheat SheetSilex Cheat Sheet
Silex Cheat Sheet
 
Symfony2 revealed
Symfony2 revealedSymfony2 revealed
Symfony2 revealed
 
Grâce aux tags Varnish, j'ai switché ma prod sur Raspberry Pi
Grâce aux tags Varnish, j'ai switché ma prod sur Raspberry PiGrâce aux tags Varnish, j'ai switché ma prod sur Raspberry Pi
Grâce aux tags Varnish, j'ai switché ma prod sur Raspberry Pi
 
Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010
 
Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010
 
Dependency injection in Drupal 8
Dependency injection in Drupal 8Dependency injection in Drupal 8
Dependency injection in Drupal 8
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい
 
Symfony2 - OSIDays 2010
Symfony2 - OSIDays 2010Symfony2 - OSIDays 2010
Symfony2 - OSIDays 2010
 
What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012What mom never told you about bundle configurations - Symfony Live Paris 2012
What mom never told you about bundle configurations - Symfony Live Paris 2012
 
Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5Bootstrat REST APIs with Laravel 5
Bootstrat REST APIs with Laravel 5
 

Más de Raul Fraile

MidwestPHP Symfony2 Internals
MidwestPHP Symfony2 InternalsMidwestPHP Symfony2 Internals
MidwestPHP Symfony2 Internals
Raul Fraile
 
Presentacion Symfony2
Presentacion Symfony2Presentacion Symfony2
Presentacion Symfony2
Raul Fraile
 

Más de Raul Fraile (17)

Aplicaciones CLI profesionales con Symfony
Aplicaciones CLI profesionales con SymfonyAplicaciones CLI profesionales con Symfony
Aplicaciones CLI profesionales con Symfony
 
Steganography: Hiding your secrets with PHP
Steganography: Hiding your secrets with PHPSteganography: Hiding your secrets with PHP
Steganography: Hiding your secrets with PHP
 
How GZIP compression works - JS Conf EU 2014
How GZIP compression works - JS Conf EU 2014How GZIP compression works - JS Conf EU 2014
How GZIP compression works - JS Conf EU 2014
 
How GZIP works... in 10 minutes
How GZIP works... in 10 minutesHow GZIP works... in 10 minutes
How GZIP works... in 10 minutes
 
Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain Symfony en Drupal 8 - DrupalCamp Spain
Symfony en Drupal 8 - DrupalCamp Spain
 
$kernel->infect(): Creating a cryptovirus for Symfony2 apps
$kernel->infect(): Creating a cryptovirus for Symfony2 apps$kernel->infect(): Creating a cryptovirus for Symfony2 apps
$kernel->infect(): Creating a cryptovirus for Symfony2 apps
 
Materiales del curso de Symfony2
Materiales del curso de Symfony2Materiales del curso de Symfony2
Materiales del curso de Symfony2
 
Sistemas de ficheros para dispositivos embebidos
Sistemas de ficheros para dispositivos embebidosSistemas de ficheros para dispositivos embebidos
Sistemas de ficheros para dispositivos embebidos
 
Refactoring PHP/Symfony2 apps
Refactoring PHP/Symfony2 appsRefactoring PHP/Symfony2 apps
Refactoring PHP/Symfony2 apps
 
Refactorización de aplicaciones PHP/Symfony2
Refactorización de aplicaciones PHP/Symfony2Refactorización de aplicaciones PHP/Symfony2
Refactorización de aplicaciones PHP/Symfony2
 
MidwestPHP Symfony2 Internals
MidwestPHP Symfony2 InternalsMidwestPHP Symfony2 Internals
MidwestPHP Symfony2 Internals
 
DeSymfony 2012: Symfony internals
DeSymfony 2012: Symfony internalsDeSymfony 2012: Symfony internals
DeSymfony 2012: Symfony internals
 
Symfony2: Interacción con CSS, JS y HTML5
Symfony2: Interacción con CSS, JS y HTML5Symfony2: Interacción con CSS, JS y HTML5
Symfony2: Interacción con CSS, JS y HTML5
 
Symfony2: Optimización y rendimiento
Symfony2: Optimización y rendimientoSymfony2: Optimización y rendimiento
Symfony2: Optimización y rendimiento
 
Symfony2: Framework para PHP5
Symfony2: Framework para PHP5Symfony2: Framework para PHP5
Symfony2: Framework para PHP5
 
Symfony2: Framework para PHP5
Symfony2: Framework para PHP5Symfony2: Framework para PHP5
Symfony2: Framework para PHP5
 
Presentacion Symfony2
Presentacion Symfony2Presentacion Symfony2
Presentacion Symfony2
 

Último

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Último (20)

Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 

Symfony internals [english]