SlideShare ist ein Scribd-Unternehmen logo
1 von 51
Downloaden Sie, um offline zu lesen
Symfony
components in
     the wild	
   Jakub Zalas
Who am I?	


o  Remembers symfony 1.0
   (2007)	
o  Open Source contributor	
o  BDD advocate	
o  Works at Sensio Labs UK	
o  ZCE & Sensio Labs           o  Twitter: @jakub_zalas	
   Certi"ed Symfony            o  Blog: http://zalas.eu	
   Developer	
                 o  Github: @jakzal
What is Symfony?	

                                  First, Symfony2 is a reusable set 	
                            of standalone, decoupled, and cohesive 	
                                          PHP components 	
                  that solve common web development problems.	


                          Then, based on these components, 	
                      Symfony2 is also a full-stack web framework.	

http://www.sxc.hu/photo/1197009                          http://fabien.potencier.org/article/49/what-is-symfony2
Why does it matter?	




                           * 76% of statistics found on the Internet is made up

http://www.sxc.hu/photo/1223174
Reinventing the wheel	




http://flic.kr/p/Mu9m2
Maintenance hell	




http://www.sxc.hu/photo/1005333
Symfony components	

   HttpFoundation	
                                 Console	
              Validator	
        Form	

   Routing	
                 HttpKernel	
                                       OptionsResolver	
                                                           CssSelector	
       DependencyInjection	
                     BrowserKit	
     DomCrawler	
            Translation	
  EventDispatcher	
                                                                 Security	
              Locale	
                                            Templating	
        Filesystem	
                                                                              Con"g	
  Process	
                  Finder	
           ClassLoader	
                                Yaml	
                                                                       Serializer	
http://www.sxc.hu/photo/338038
HttpFoundation	




http://www.sxc.hu/photo/1212545
use SymfonyComponentHttpFoundationRequest;	
use SymfonyComponentHttpFoundationResponse;	
	
$request = Request::createFromGlobals();	

$name = $request->query->get('name', 'PHPNW');	
$message = "Hello $name!";	

$response = new Response($message, 200);	
$response->headers->set('X-REQUEST-NAME', $name);	
$response->headers->setCookie(new Cookie('phpnw', $name));	

$response->send();
use SymfonyComponentHttpFoundationRequest;	
use SymfonyComponentHttpFoundationResponse;	
	
$request = Request::createFromGlobals();	

$name = $request->query->get('name', 'PHPNW');	
$message = "Hello $name!";	
                                   	
                                   $request->request	
$response = new Response($message, 200);	
                                   $request->query	
$response->headers->set('X-REQUEST-NAME', $name);	
                                   $request->server	
$response->headers->setCookie(new Cookie('phpnw', $name));	
                                   $request->files	
$response->send();	
               $request->cookies	
                                   $request->headers	
                                   $request->attributes
$request = Request::createFromGlobals();	
$session = $request->getSession();	

if ($session->has('referrer')) {	
    $referrer = $session->get('referrer');	

      return new RedirectResponse($referrer);	
}	

if ($session->hasFlash('notice')) {	
    return new Response($session->getFlash('notice'));	
} else {	
    $session->setFlash('notice', 'Hello again!');	

      return new Response('Foo')	
}
$request = Request::createFromGlobals();	
$date = getPageUpdatedAtById($request->query->get('id'));	

$response = new Response();	
$response->setPublic();	
$response->setLastModified($date);	

if ($response->isNotModified($request)) {	
    return $response;	
}	

// else do heavy processing to render the page
How to check if a request is made over ssl?	

•  is there HTTPS in the server vars? is it 'on' or '1'?	
•  or is there SSL_HTTPS header? is it 'on' or '1'?	
•  or is there X_FORWARDED_PROTO header set to 'https'	

if ($request->isSecure()) {	
    // we're fine
}
Routing	




http://www.sxc.hu/photo/1070609
use SymfonyComponentRoutingRouteCollection;	
use SymfonyComponentRoutingRoute;	

$routes = new RouteCollection();	

$routes->add('hello', new Route('/hello/{name}', array(	
    'controller' => 'HelloController'	
)));	

$routes->add('homepage', new Route('/', array(	
    'controller' => 'HomepageController'	
)));
use SymfonyComponentRoutingMatcherUrlMatcher;	
use SymfonyComponentRoutingRequestContext;	

$matcher = new UrlMatcher($routes, new RequestContext());	

$parameters = $matcher->match('/');	

var_dump($parameters);	
// array(	
//     'controller' => 'HomepageController', 	
//     '_route' => 'homepage'	
// )
use SymfonyComponentRoutingMatcherUrlMatcher;	
use SymfonyComponentRoutingRequestContext;	

$matcher = new UrlMatcher($routes, new RequestContext());	

$parameters = $matcher->match('/hello/PHPNW');	

var_dump($parameters);	
// array(	
//     'controller' => 'HelloController', 	
//     'name' => 'PHPNW',	
//     '_route' => 'hello'	
// )
use SymfonyComponentRoutingMatcherUrlMatcher;	
use SymfonyComponentRoutingRequestContext;	
  $routes->add('hello', new Route('/hello/{name}', array(	
$matcher = new UrlMatcher($routes, new RequestContext());	
      'controller' => 'HelloController'	
  )));	
  	
$parameters = $matcher->match('/hello/PHPNW');	

var_dump($parameters);	
// array(	
//     'controller' => 'HelloController', 	
//     'name' => 'PHPNW',	
//     '_route' => 'hello'	
// )
$routes = new RouteCollection();	
$routes->add('hello', new Route(	
      '/hello/{name}',	
      array('controller' => 'HelloController'),	
      array('name' => '^[a-zA-Z]+$')	
));	

$matcher = new UrlMatcher($routes, new RequestContext());	

$parameters = $matcher->match('/hello/PHPNW');	

var_dump($parameters);	
// array(	
//     'controller' => 'HelloController', 	
//     'name' => 'PHPNW',	
//     '_route' => 'hello'	
// )
use SymfonyComponentRoutingException;	

$routes = new RouteCollection();	
$routes->add('hello', new Route(	
      '/hello/{name}',	
      array('controller' => 'HelloController'),	
      array('name' => '^[a-zA-Z]+$')	
));	

$matcher = new UrlMatcher($routes, new RequestContext());	

try {	
    $matcher->match('/hello/PHPNW12');	
} catch (ExceptionResourceNotFoundException $exception) {	
    die('Resource not found');	
}
use SymfonyComponentRoutingGeneratorUrlGenerator;	

$generator = new UrlGenerator(	
     $routes, new RequestContext()	
);	

// "/hello/PHPNW"	
$url = $generator->generate(	
     'hello', array('name' => 'PHPNW')	
);	

// "http://localhost/hello/PHPNW"	
$url = $generator->generate(	
     'hello', array('name' => 'PHPNW'), true	
);
EventDispatcher	




http://www.sxc.hu/photo/715294
use SymfonyComponentEventDispatcherEventDispatcher;	
use SymfonyComponentEventDispatcherEvent;	

$dispatcher = new EventDispatcher();	

$dispatcher->addListener(	
     'received_hello',	
     function (Event $event) {	
         printf("Hello from listener 1!n");	
     }	
);	
$dispatcher->addListener(	
     'received_hello', 	
     function (Event $event) {	
         printf("Hello from listener 2!n");	
     }	
);
printf("Hello!n");	
$dispatcher->dispatch('received_hello', new Event());	




               Hello!	
               Hello from listener 1!	
               Hello from listener 2!
$dispatcher = new EventDispatcher();	

$dispatcher->addListener(	
     'received_hello',	
     function (Event $event) {	
          printf("Hello from listener 1!n");	
     },	
     0	
);	

$dispatcher->addListener(	
     'received_hello', 	
     function (Event $event) {	
          printf("Hello from listener 2!n");	
     },	
     10	
);
printf("Hello!n");	
$dispatcher->dispatch('received_hello', new Event());	




               Hello!	
               Hello from listener 2!	
               Hello from listener 1!
$dispatcher = new EventDispatcher();	

$dispatcher->addListener(	
    'received_hello',	
    function (Event $event) {	
        printf("Hello from listener 1!n");	

             $event->stopPropagation();	
       }	
);	

$dispatcher->addListener(	
     'received_hello', 	
     function (Event $event) {	
         printf("Hello from listener 2!n");	
     }	
);
printf("Hello!n");	
$dispatcher->dispatch('received_hello', new Event());	




               Hello!	
               Hello from listener 1!
$app = new SilexApplication();	

$app->after(	
     function (Request $request, Response $response) {	
         // http://phpnw.dev/?hello=1	
         if ($request->query->get('hello') === '1') {	
             $content = str_replace(	
                  '</body>', 	
                  'Hello!!</body>',	
                  $response->getContent()	
             );	
             $response->setContent($content);	
         }	
     }	
);
// Silex/src/Silex/Application.php:304	

public function after($callback, $priority = 0)	
{	
    $this['dispatcher']->addListener(	
         SilexEvents::AFTER, 	
         function (FilterResponseEvent $event)	
           use ($callback) {	
               call_user_func(	
                    $callback, 	
                    $event->getRequest(),	
                    $event->getResponse()	
               );	
         }, 	
         $priority	
    );	
}
// Silex/src/Silex/Application.php:603	

$this['dispatcher']->dispatch(SilexEvents::AFTER, $event);
HttpKernel	




http://www.sxc.hu/photo/835732
$resolver = new ControllerResolver();	
$httpKernel = new HttpKernel($dispatcher, $resolver);	
$request = Request::create('/hello/PHPNW')	
$response = $httpKernel->handle($request);	

echo $response;	

     HTTP/1.0 200 OK	
     Cache-Control: no-cache	
     Date:          Sat, 06 Oct 2012 14:32:14 GMT	
     	
     Hello PHPNW
$matcher = new UrlMatcher($routes, new RequestContext());	

$dispatcher = new EventDispatcher();	
$dispatcher->addListener(	
     KernelEvents::REQUEST, 	
     function (GetResponseEvent $event) use ($matcher) {	
         $request = $event->getRequest();	
         $pathInfo = $request->getPathInfo();	
         // array contains '_controler', 'name', '_route'	
         $parameters = $matcher->match($pathInfo);	
         $request->attributes->add($parameters);	
     }	
);
use SymfonyComponentRoutingRouteCollection;	
use SymfonyComponentRoutingRoute;	

$routes = new RouteCollection();	

$routes->add('hello', new Route('/hello/{name}', array(	
    '_controller' => 'PhpnwController::hello'	
)));	

$routes->add('homepage', new Route('/', array(	
    '_controller' => 'PhpnwController::homepage'	
)));
use SymfonyComponentHttpFoundationRequest;	
use SymfonyComponentHttpFoundationResponse;	

class PhpnwController	
{	
    public function hello(Request $request, $name)	
    {	
        return new Response('Hello '.$name.PHP_EOL);	
    }	

      public function homepage(Request $request)	
      {	
          return new Response('Home sweet home'.PHP_EOL);	
      }	
}
$response = $httpKernel->handle(Request::create('/bye'));	



PHP Fatal error: Uncaught exception 'SymfonyComponent
RoutingExceptionResourceNotFoundException' in /home/
vagrant/Projects/WildComponents/vendor/symfony/routing/
Symfony/Component/Routing/Matcher/UrlMatcher.php:81
$dispatcher->addListener(	
     KernelEvents::EXCEPTION, 	
     function (GetResponseForExceptionEvent $event) {	
          $message = $event->getException()->getMessage();	
          $response = new Response($message, 404);	
          $event->setResponse($response);	
     }	
);	
       HTTP/1.0 404 Not Found	
       Cache-Control: no-cache	
       Date:           Sat, 06 Oct 2012 09:01:02 GMT	
       	
       Unable to find the controller for path "/bye".
       Maybe you forgot to add the matching route in
       your routing configuration?
Console	




http://www.sxc.hu/photo/910912
use SymfonyComponentConsoleCommandCommand;	
use SymfonyComponentConsoleInputInputInterface;	
use SymfonyComponentConsoleOutputOutputInterface;	

class HelloCommand extends Command	
{	
    public function configure()	
    {	
        // configure the command [...]	
    }	

        protected function execute(InputInterface $input,
      OutputInterface $output)	
        {	
            // put your code here [...]	
        }	
}
public function configure()	
{	
    $this->setDescription('Outputs welcome message[...]');	
    $this->setHelp('Outputs welcome message.');	
    $this->addArgument(	
         'name', 	
         InputArgument::OPTIONAL, 	
         'The name to output to the screen', 	
         'World'	
    );	
}
$application = new Application('Demo', '1.0.0');	
$application->add(new HelloCommand('hello'));	
$application->run();
protected function execute(InputInterface $input, 	
    OutputInterface $output)	
{	
          $name = $input->getArgument('name');	

            $output->writeln(sprintf('Hello %s!', $name));	
      }	
}
public function configure()	
{	
    // [...]	

      $this->addOption(	
           'more', 	
           'm', 	
           InputOption::VALUE_NONE, 	
           'Tell me more'	
      );	
}
protected function execute(InputInterface $input, 	
    OutputInterface $output)	
{	
          $name = $input->getArgument('name');	

           $output->writeln(sprintf('Hello %s!', $name));	

            if ($input->getOption('more')) {	
                $output->writeln('It is really nice to meet
      you!');	
            }	
        }	
}
How to start?	

   // composer.json	
   {	
             "require": {	
                       "symfony/http-foundation": "2.1.2"	
             }	
   }	

   curl -s https://getcomposer.org/installer | php	
   php composer.phar install	

http://www.sxc.hu/photo/1092493
Why Symfony?	


 •  Good code covered by tests	
 •  Flexible	
 •  Secure	
 •  Stable API (@api annotation)	
 •  Long term support	
 •  Outstanding community	
 •  Wide adoption
Thank you!	



                                          Rate my talk:	
                                       https://joind.in/6945	




                                              Interested in training? 	
               We're introducing Symfony Components trainings soon:
                 http://www.sensiolabs.co.uk/training/symfony2.html

Weitere ähnliche Inhalte

Was ist angesagt?

Doctrine MongoDB ODM (PDXPHP)
Doctrine MongoDB ODM (PDXPHP)Doctrine MongoDB ODM (PDXPHP)
Doctrine MongoDB ODM (PDXPHP)Kris Wallsmith
 
Speed up your developments with Symfony2
Speed up your developments with Symfony2Speed up your developments with Symfony2
Speed up your developments with Symfony2Hugo Hamon
 
The Zen of Lithium
The Zen of LithiumThe Zen of Lithium
The Zen of LithiumNate Abele
 
Design how your objects talk through mocking
Design how your objects talk through mockingDesign how your objects talk through mocking
Design how your objects talk through mockingKonstantin Kudryashov
 
The Origin of Lithium
The Origin of LithiumThe Origin of Lithium
The Origin of LithiumNate Abele
 
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 IPC 201
Dependency Injection IPC 201Dependency Injection IPC 201
Dependency Injection IPC 201Fabien Potencier
 
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 clienteLeonardo Proietti
 
Introducing Assetic (NYPHP)
Introducing Assetic (NYPHP)Introducing Assetic (NYPHP)
Introducing Assetic (NYPHP)Kris Wallsmith
 
PHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkPHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkG Woo
 
Doctrine fixtures
Doctrine fixturesDoctrine fixtures
Doctrine fixturesBill Chang
 
Electrify your code with PHP Generators
Electrify your code with PHP GeneratorsElectrify your code with PHP Generators
Electrify your code with PHP GeneratorsMark Baker
 
Building Lithium Apps
Building Lithium AppsBuilding Lithium Apps
Building Lithium AppsNate Abele
 
Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5Leonardo Proietti
 
Love and Loss: A Symfony Security Play
Love and Loss: A Symfony Security PlayLove and Loss: A Symfony Security Play
Love and Loss: A Symfony Security PlayKris Wallsmith
 
Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)Fabien Potencier
 
How I started to love design patterns
How I started to love design patternsHow I started to love design patterns
How I started to love design patternsSamuel ROZE
 
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo EditionLithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo EditionNate Abele
 
Dealing with Continuous Data Processing, ConFoo 2012
Dealing with Continuous Data Processing, ConFoo 2012Dealing with Continuous Data Processing, ConFoo 2012
Dealing with Continuous Data Processing, ConFoo 2012Michael Peacock
 

Was ist angesagt? (20)

Doctrine MongoDB ODM (PDXPHP)
Doctrine MongoDB ODM (PDXPHP)Doctrine MongoDB ODM (PDXPHP)
Doctrine MongoDB ODM (PDXPHP)
 
Speed up your developments with Symfony2
Speed up your developments with Symfony2Speed up your developments with Symfony2
Speed up your developments with Symfony2
 
The Zen of Lithium
The Zen of LithiumThe Zen of Lithium
The Zen of Lithium
 
Design how your objects talk through mocking
Design how your objects talk through mockingDesign how your objects talk through mocking
Design how your objects talk through mocking
 
The Origin of Lithium
The Origin of LithiumThe Origin of Lithium
The Origin of Lithium
 
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)
 
Dependency Injection IPC 201
Dependency Injection IPC 201Dependency Injection IPC 201
Dependency Injection IPC 201
 
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
 
Introducing Assetic (NYPHP)
Introducing Assetic (NYPHP)Introducing Assetic (NYPHP)
Introducing Assetic (NYPHP)
 
PHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php frameworkPHP 5.3 and Lithium: the most rad php framework
PHP 5.3 and Lithium: the most rad php framework
 
Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010
 
Doctrine fixtures
Doctrine fixturesDoctrine fixtures
Doctrine fixtures
 
Electrify your code with PHP Generators
Electrify your code with PHP GeneratorsElectrify your code with PHP Generators
Electrify your code with PHP Generators
 
Building Lithium Apps
Building Lithium AppsBuilding Lithium Apps
Building Lithium Apps
 
Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5Rich domain model with symfony 2.5 and doctrine 2.5
Rich domain model with symfony 2.5 and doctrine 2.5
 
Love and Loss: A Symfony Security Play
Love and Loss: A Symfony Security PlayLove and Loss: A Symfony Security Play
Love and Loss: A Symfony Security Play
 
Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)Symfony 2 (PHP Quebec 2009)
Symfony 2 (PHP Quebec 2009)
 
How I started to love design patterns
How I started to love design patternsHow I started to love design patterns
How I started to love design patterns
 
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo EditionLithium: The Framework for People Who Hate Frameworks, Tokyo Edition
Lithium: The Framework for People Who Hate Frameworks, Tokyo Edition
 
Dealing with Continuous Data Processing, ConFoo 2012
Dealing with Continuous Data Processing, ConFoo 2012Dealing with Continuous Data Processing, ConFoo 2012
Dealing with Continuous Data Processing, ConFoo 2012
 

Ähnlich wie Symfony components in the wild, PHPNW12

Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsMichael Peacock
 
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 CracowKacper Gunia
 
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Юлия Коваленко
 
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!Kacper Gunia
 
Symfony As A Platform (Symfony Camp 2007)
Symfony As A Platform (Symfony Camp 2007)Symfony As A Platform (Symfony Camp 2007)
Symfony As A Platform (Symfony Camp 2007)Fabien Potencier
 
Symfony internals [english]
Symfony internals [english]Symfony internals [english]
Symfony internals [english]Raul Fraile
 
How Kris Writes Symfony Apps
How Kris Writes Symfony AppsHow Kris Writes Symfony Apps
How Kris Writes Symfony AppsKris Wallsmith
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐいHisateru Tanaka
 
symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207patter
 
How kris-writes-symfony-apps-london
How kris-writes-symfony-apps-londonHow kris-writes-symfony-apps-london
How kris-writes-symfony-apps-londonKris Wallsmith
 
The symfony platform: Create your very own framework (PHP Quebec 2008)
The symfony platform: Create your very own framework (PHP Quebec 2008)The symfony platform: Create your very own framework (PHP Quebec 2008)
The symfony platform: Create your very own framework (PHP Quebec 2008)Fabien Potencier
 
Doctrine For Beginners
Doctrine For BeginnersDoctrine For Beginners
Doctrine For BeginnersJonathan Wage
 
Refactoring using Codeception
Refactoring using CodeceptionRefactoring using Codeception
Refactoring using CodeceptionJeroen van Dijk
 
Symfony2 Components - The Event Dispatcher
Symfony2 Components - The Event DispatcherSymfony2 Components - The Event Dispatcher
Symfony2 Components - The Event DispatcherSarah El-Atm
 
Decoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICDecoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICKonstantin Kudryashov
 
PHPUnit elevato alla Symfony2
PHPUnit elevato alla Symfony2PHPUnit elevato alla Symfony2
PHPUnit elevato alla Symfony2eugenio pombi
 
Dirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP ExtensionDirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP ExtensionAdam Trachtenberg
 

Ähnlich wie Symfony components in the wild, PHPNW12 (20)

Phpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friendsPhpne august-2012-symfony-components-friends
Phpne august-2012-symfony-components-friends
 
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
 
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
 
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 As A Platform (Symfony Camp 2007)
Symfony As A Platform (Symfony Camp 2007)Symfony As A Platform (Symfony Camp 2007)
Symfony As A Platform (Symfony Camp 2007)
 
Symfony internals [english]
Symfony internals [english]Symfony internals [english]
Symfony internals [english]
 
How Kris Writes Symfony Apps
How Kris Writes Symfony AppsHow Kris Writes Symfony Apps
How Kris Writes Symfony Apps
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい
 
symfony on action - WebTech 207
symfony on action - WebTech 207symfony on action - WebTech 207
symfony on action - WebTech 207
 
How kris-writes-symfony-apps-london
How kris-writes-symfony-apps-londonHow kris-writes-symfony-apps-london
How kris-writes-symfony-apps-london
 
Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010Symfony2 - WebExpo 2010
Symfony2 - WebExpo 2010
 
Symfony2 - OSIDays 2010
Symfony2 - OSIDays 2010Symfony2 - OSIDays 2010
Symfony2 - OSIDays 2010
 
PHP pod mikroskopom
PHP pod mikroskopomPHP pod mikroskopom
PHP pod mikroskopom
 
The symfony platform: Create your very own framework (PHP Quebec 2008)
The symfony platform: Create your very own framework (PHP Quebec 2008)The symfony platform: Create your very own framework (PHP Quebec 2008)
The symfony platform: Create your very own framework (PHP Quebec 2008)
 
Doctrine For Beginners
Doctrine For BeginnersDoctrine For Beginners
Doctrine For Beginners
 
Refactoring using Codeception
Refactoring using CodeceptionRefactoring using Codeception
Refactoring using Codeception
 
Symfony2 Components - The Event Dispatcher
Symfony2 Components - The Event DispatcherSymfony2 Components - The Event Dispatcher
Symfony2 Components - The Event Dispatcher
 
Decoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DICDecoupling with Design Patterns and Symfony2 DIC
Decoupling with Design Patterns and Symfony2 DIC
 
PHPUnit elevato alla Symfony2
PHPUnit elevato alla Symfony2PHPUnit elevato alla Symfony2
PHPUnit elevato alla Symfony2
 
Dirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP ExtensionDirty Secrets of the PHP SOAP Extension
Dirty Secrets of the PHP SOAP Extension
 

Kürzlich hochgeladen

How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 

Kürzlich hochgeladen (20)

E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 

Symfony components in the wild, PHPNW12