Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Micropage in microtime using microframework

Micropage in microtime using microframework

Why you don't always need full stack framework? Examples based on PHP's Slim Framework.

Radek Benkel

January 23, 2012
Tweet

More Decks by Radek Benkel

Other Decks in Technology

Transcript

  1. 1

  2. 2

  3. 6 name: Radosław Benkel nick: singles www: http://www.rbenkel.me twitter: @singlespl

    * * and I have nothing in common with http://www.singles.pl ;]
  4. 9

  5. 15

  6. I

  7. 17

  8. 18

  9. 24 <?php require 'Slim/Slim.php'; $app = new Slim(); $app->get('/', function()

    { echo 'Hello World from base route.'; }); $app->run(); BASE ROUTING
  10. 25 <?php require 'Slim/Slim.php'; $app = new Slim(); $app->get('/', function()

    { echo 'Hello World from base route.'; }); //param "name" is required $app->get('/hello_to/:name', function($name) { echo 'Hello World to ' . $name; }); $app->run(); REQUIRED PARAM
  11. 26 <?php require 'Slim/Slim.php'; $app = new Slim(); $app->get('/', function()

    { echo 'Hello World from base route.'; }); //when using optional params, you have to define default value for function param $app->get('/hello_to(/:name)', function($name = null) { if ($name === null) { $name = 'John Doe'; } echo 'Hello World to ' . $name; }); $app->run(); OPTIONAL PARAM
  12. 27 <?php require 'Slim/Slim.php'; $app = new Slim(); $app->get('/', function()

    use ($app) { echo 'Hello World from base route.<br>'; $url = $app->urlFor('hello', array('name' => 'Jimmy')); //create link for route $link = sprintf('<a href="%s">%s</a>', $url, $url); echo 'Oh, link to hello page for Jimmy is ' . $link; }); $app->get('/hello_to(/:name)', function($name = null) { if ($name === null) { $name = 'John Doe'; } echo 'Hello World to ' . $name; })->name('hello'); //using name for route $app->run(); NAMED ROUTES
  13. 28 <?php require 'Slim/Slim.php'; $app = new Slim(); $app->get('/', function()

    use ($app) { echo 'Hello World from base route.<br>'; $url = $app->urlFor('hello', array('name' => 'Jimmy')); $link = sprintf('<a href="%s">%s</a>', $url, $url); echo 'Oh, link to hello page for Jimmy is ' . $link; }); $app->get('/hello_to(/:name)', function($name = null) { if ($name === null) { $name = 'John Doe'; } echo 'Hello World to ' . $name; })->name('hello') ->conditions(array('name' => '[A-Za-z]+')); //use only letters as param 'name' $app->run(); ROUTE CONDITIONS
  14. 29 <?php require 'Slim/Slim.php'; $app = new Slim(); /* ...

    */ $app->get('/hello_to(/:name)', function($name = null) { if ($name === null) { $name = 'John Doe'; } echo 'Hello World to ' . $name; })->name('hello') ->conditions(array('name' => '[A-Za-z]+')); //redirect to default hello page $app->get('/redirect', function() use ($app) { $app->redirect($app->urlFor('hello')); }); $app->run(); REDIRECT
  15. 30 <?php require 'Slim/Slim.php'; $app = new Slim(); /* ...

    */ $app->get('/hello_to(/:name)', function($name = null) { if ($name === null) { $name = 'John Doe'; } echo 'Hello World to ' . $name; })->name('hello') ->conditions(array('name' => '[A-Za-z]+')); //redirect to default hello page as 301, not 302 which is default $app->get('/redirect', function() use ($app) { $app->redirect($app->urlFor('hello'), 301); }); $app->run(); REDIRECT WITH STATUS
  16. 31 MIDDLEWARE <?php require 'Slim/Slim.php'; $app = new Slim(); $app->get('/',

    function() { //this will be executed before main callable echo "Hello, I'm middleware <br>"; }, function() use ($app) { echo 'Hello World from base route.<br>'; $url = $app->urlFor('hello', array('name' => 'Jimmy')); $link = sprintf('<a href="%s">%s</a>', $url, $url); echo 'Oh, link to hello page for Jimmy is ' . $link; }); /* ... */ $app->run();
  17. 32 MIDDLEWARE <?php require 'Slim/Slim.php'; $app = new Slim(); $app->get('/',

    function() { //this will be executed before main callable echo "Hello, I'm middleware <br>"; }, function() { //this will be executed before main callable echo "And I'm second middleware <br>"; }, function() use ($app) { echo 'Hello World from base route.<br>'; $url = $app->urlFor('hello', array('name' => 'Jimmy')); $link = sprintf('<a href="%s">%s</a>', $url, $url); echo 'Oh, link to hello page for Jimmy is ' . $link; }); /* ... */ $app->run();
  18. 33 MIDDLEWARE <?php require 'Slim/Slim.php'; $app = new Slim(); $app->get('/',

    function() { //this will be executed before main callable echo "Hello, I'm middleware <br>"; }, function() { //this will be executed before main callable echo "And I'm second middleware <br>"; }, function() use ($app) { echo 'Hello World from base route.<br>'; $url = $app->urlFor('hello', array('name' => 'Jimmy')); $link = sprintf('<a href="%s">%s</a>', $url, $url); echo 'Oh, link to hello page for Jimmy is ' . $link; }); /* ... */ $app->run(); And
  19. 34 VIEW <?php //file index.php require 'Slim/Slim.php'; $app = new

    Slim(); $app->get('/', function() use ($app) { $url = $app->urlFor('hello', array('name' => 'Jimmy')); //default path is "__DIR__ . /templates" return $app->render('view.php', compact('url')); }); /* ... */ $app->run(); Hello World from base route. <br> Oh, link to hello page for Jimmy is <a href="<?php echo $url?>"><?php echo $url?></a>
  20. 35 HTTP CACHE - ETAG <?php require 'Slim/Slim.php'; $app =

    new Slim(); /* ... */ $app->get('/hello_to(/:name)', function($name = null) use ($app) { if ($name === null) { $name = 'John Doe'; } //auto ETag based on some id - next request with the same name will return 304 Not Modified $app->etag($name); echo 'Hello World to ' . $name; })->name('hello') ->conditions(array('name' => '[A-Za-z]+')); /* ... */ $app->run();
  21. 36 HTTP CACHE - TIME BASED <?php require 'Slim/Slim.php'; $app

    = new Slim(); /* ... */ $app->get('/hello_to(/:name)', function($name = null) use ($app) { if ($name === null) { $name = 'John Doe'; } $app->lastModified(1327305485); //cache based on time echo 'Hello World to ' . $name; })->name('hello') ->conditions(array('name' => '[A-Za-z]+')); /* ... */ $app->run();
  22. 37 FLASH MESSAGE <?php require 'Slim/Slim.php'; $app = new Slim();

    $app->get('/', function() use ($app) { $url = $app->urlFor('hello', array('name' => 'Jimmy')); return $app->render('view.php', compact('url')); }); //redirect to default page with flash message which will be displayed once $app->get('/redirect', function() use ($app) { $app->flash('info', "You were redirected"); $app->redirect($app->request()->getRootUri()); }); $app->run(); <?php echo $flash['info'] ?> Hello World from base route. <br> Oh, link to hello page for Jimmy is <a href="<?php echo $url?>"><?php echo $url?></a>
  23. 38 CUSTOM 404 <?php require 'Slim/Slim.php'; $app = new Slim();

    //define custom 404 page $app->notFound(function() { echo "I'm custom 404"; }); $app->get('/hello_to(/:name)', function($name = null) use ($app) { if ($name === null) { $name = 'John Doe'; } $possibleNames = array('Leonard', 'Sheldon', 'John Doe'); //when name not found, force 404 page if (array_search($name, $possibleNames) === false) { $app->notFound(); } echo 'Hello World to ' . $name; })->name('hello') ->conditions(array('name' => '[A-Za-z]+')); $app->run();
  24. 39 CUSTOM 404 <?php require 'Slim/Slim.php'; $app = new Slim();

    //define custom 404 page $app->notFound(function() { echo "I'm custom 404"; }); $app->get('/hello_to(/:name)', function($name = null) use ($app) { if ($name === null) { $name = 'John Doe'; } $possibleNames = array('Leonard', 'Sheldon', 'John Doe'); //when name not found, force 404 page if (array_search($name, $possibleNames) === false) { $app->notFound(); } echo 'Hello World to ' . $name; })->name('hello') ->conditions(array('name' => '[A-Za-z]+')); $app->run(); Custom
  25. 40 REST PATHS #1 <?php require 'Slim/Slim.php'; $app = new

    Slim(); //method name maps to HTTP method $app->get('/article'), function(/* ... */) {}); $app->post('/article'), function(/* ... */) {}); $app->get('/article/:id/'), function(/* ... */) {}); $app->put('/article/:id/'), function(/* ... */) {}); $app->delete('/article/:id/'), function(/* ... */) {});
  26. 41 REST PATHS #2 <?php require 'Slim/Slim.php'; $app = new

    Slim(); //same as previous one $app->map('/article'), function() use ($app) { if ($app->request()->isGet()) { /* ... */ } else if ($app->request()->isPost() { /* ... */ }) else { /* ... */ } })->via('GET', 'POST'); $app->map('/article/:id/'), function($id) use ($app) { //same as above })->via('GET', 'PUT', 'DELETE');
  27. 45 PHP 5.2 <?php require 'Slim/Slim.php'; $app = new Slim();

    function index() { global $app; echo 'Hello World from base route.<br>'; $url = $app->urlFor('hello', array('Jimmy')); $link = sprintf('<a href="%s">%s</a>', $url, $url); echo 'Oh, link to hello page for Jimmy is ' . $link; } //last param must return true for is_callable call, so that it's valid $app->get('/', 'index'); /* ... */ $app->run();
  28. 46 PHP 5.2 <?php require 'Slim/Slim.php'; $app = new Slim();

    function index() { global $app; echo 'Hello World from base route.<br>'; $url = $app->urlFor('hello', array('Jimmy')); $link = sprintf('<a href="%s">%s</a>', $url, $url); echo 'Oh, link to hello page for Jimmy is ' . $link; } //last param must return true for is_callable call, so that it's valid $app->get('/', 'index'); /* ... */ $app->run(); Somebody
  29. So

  30. 49 PHP 5.2 <?php class Controller { public static $app;

    public static function index() { echo 'Hello World from base route.<br>'; $url = self::$app->urlFor('hello', array('Jimmy')); $link = sprintf('<a href="%s">%s</a>', $url, $url); echo 'Oh, link to hello page for Jimmy is ' . $link; } } require 'Slim/Slim.php'; $app = new Slim(); Controller::$app = $app; //last param must return true for is_callable call, so that it's also valid $app->get('/', array('Controller', 'index')); /* ... */ $app->run();
  31. But

  32. 51 PHP 5.2 <?php class Controller { protected $_app; public

    function __construct(Slim $app) { $this->_app = $app; } public function index() { echo 'Hello World from base route.<br>'; $url = $this->_app->urlFor('hello', array('Jimmy')); $link = sprintf('<a href="%s">%s</a>', $url, $url); echo 'Oh, link to hello page for Jimmy is ' . $link; } } require 'Slim/Slim.php'; $app = new Slim(); $controller = new Controller($app); //last param must return true for is_callable call, so that it's also valid $app->get('/', array($controller, 'index')); /* ... */ $app->run();
  33. 53