silex and twig · d - dependency inversion principle. 3. 3-ish. 1.2. 10. 3. single responsibility...
TRANSCRIPT
![Page 1: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/1.jpg)
![Page 2: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/2.jpg)
Silex and TwigJon Ginn
![Page 3: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/3.jpg)
Silex and TwigJon Ginn
![Page 4: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/4.jpg)
![Page 5: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/5.jpg)
![Page 6: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/6.jpg)
Silex and TwigAlex Ross and Dave Hulbert
![Page 7: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/7.jpg)
![Page 8: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/8.jpg)
![Page 9: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/9.jpg)
Alex@rosseySenior engineer at Base*
*we’re hiring
Dave@dave1010Tech lead at Base*
wearebase.com
![Page 10: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/10.jpg)
Alex@rosseySenior engineer at Base*
*we’re hiring
Dave@dave1010Tech lead at Base*
wearebase.com
![Page 11: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/11.jpg)
Silex and Twig
![Page 12: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/12.jpg)
Silex
![Page 13: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/13.jpg)
![Page 14: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/14.jpg)
Micro-framework?a what?
![Page 15: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/15.jpg)
Framework?...?
![Page 16: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/16.jpg)
“A structure for applications”
(and usually a library of tools too)
![Page 17: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/17.jpg)
![Page 18: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/18.jpg)
Silex
● a simple web application structure that doesn’t get in your way
● library of tools = Symfony Components
![Page 19: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/19.jpg)
Code!
![Page 20: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/20.jpg)
// use the Request$name = $_GET['name'];
// do some fun stuff$name = strtoupper($name);
// send back a Responseecho 'Hello ' . htmlspecialchars($name);
![Page 21: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/21.jpg)
![Page 22: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/22.jpg)
![Page 23: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/23.jpg)
tightly coupling :-(
Tying your code to the input and output:● Input, global states (Request)
○ $_SERVER, $_GET, $_POST, $_REQUEST, $_FILES, $_COOKIE, $_ENV
● Output (Response)○ echo*, print, printf, die, exit
*we could test this with ob_start, ob_get_clean
![Page 24: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/24.jpg)
![Page 25: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/25.jpg)
What if we wanted to make it
● a JSON API?● send the response as an email or SMS?● a commandline program?● an enterprise SOAP Service?● communicate via Morse code / Enigma
machine?
![Page 26: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/26.jpg)
![Page 27: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/27.jpg)
Dirty code (STUPID)
● S - Singletons and Globals● T - Tight Coupling● U - Untestable code● P - Premature Optimisation● I - In-descriptive Naming● D - Duplication● D - Duplication
![Page 28: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/28.jpg)
![Page 29: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/29.jpg)
Testability(PHPUnit)
![Page 30: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/30.jpg)
require_once __DIR__.'/../vendor/autoload.php';
$app = new Silex\Application();
$app->get('/hello/{name}', function($name) use($app) { return 'Hello ' . $app->escape($name); });
$app->run();
![Page 31: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/31.jpg)
#!/usr/bin/env rubyrequire 'sinatra'
get '/hello/:name' do "Hello #{params[:name]}!"end
![Page 32: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/32.jpg)
var express = require('express');var app = express();
app.get('/hello.txt', function(req, res) { res.send('hello world'); });
![Page 33: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/33.jpg)
![Page 34: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/34.jpg)
Clean code
● Modular● Reusable● Easy to extend or change● Easy to read and understand● Easy to refactor (maintainable)● Easy to test
![Page 35: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/35.jpg)
![Page 36: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/36.jpg)
SOLID
● S - SRP● O - OCP● L - LSP● I - ISP● D - DIP
![Page 37: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/37.jpg)
SOLID
● S - Single Responsibility Principle● O - Open / Closed Principle● L - Liskov Substitution Principle● I - Interface Segregation Principle● D - Dependency Inversion Principle
![Page 38: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/38.jpg)
3
![Page 39: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/39.jpg)
3-ish
![Page 40: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/40.jpg)
1.2
![Page 41: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/41.jpg)
10
![Page 42: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/42.jpg)
3
![Page 43: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/43.jpg)
Single Responsibility Principle
One reason to change
![Page 44: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/44.jpg)
![Page 45: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/45.jpg)
Open / Closed PrincipleOpen for extension
Closed for modification
![Page 46: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/46.jpg)
![Page 47: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/47.jpg)
Liskov Substitution Principle
Extending a class shouldn’t break stuff
![Page 48: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/48.jpg)
![Page 49: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/49.jpg)
![Page 50: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/50.jpg)
Interface Segregation Principle
Don’t depend on stuff you don’t use
![Page 51: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/51.jpg)
![Page 52: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/52.jpg)
Dependency Inversion Principle
Depend on a concept (abstractions),not an implementation
![Page 53: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/53.jpg)
![Page 54: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/54.jpg)
application business logic
Response object
wraps $_SERVER, $_REQUEST, etc nicely headers and body
Request object
GET RETURN
Separation of concerns :-)
![Page 55: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/55.jpg)
A test(PHPUnit)
![Page 56: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/56.jpg)
use Silex\WebTestCase;
class ContactFormTest extends WebTestCase{ public function testTheContactPage() { $client = $this->createClient(); $crawler = $client->request('GET', '/contact');
$this->assertTrue($client->getResponse()->isOk()); $this->assertCount(1, $crawler->filter('h1:contains("Contact us")')); $this->assertCount(1, $crawler->filter('form')); $this->assertCount(1, $crawler->filter('input:contains("Say hi!")')); }}
![Page 57: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/57.jpg)
Make the test pass
![Page 58: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/58.jpg)
![Page 59: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/59.jpg)
![Page 60: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/60.jpg)
HttpKernelInterfaceCreates flexible and fast HTTP-based
applications
![Page 61: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/61.jpg)
interface HttpKernelInterface
{ const MASTER_REQUEST = 1;
const SUB_REQUEST = 2;
public function handle( Request $name, $type = self::MASTER_REQUEST, $catch = true ) {}
}
![Page 62: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/62.jpg)
/**
* Handles a Request to convert it to a Response.
*
* When $catch is true, the implementation must catch all exceptions
* and do its best to convert them to a Response instance.
*
* @param Request $request A Request instance
* @param integer $type The type of the request (MASTER_REQUEST or SUB_REQUEST)
* @param Boolean $catch Whether to catch exceptions or not
* @return Response A Response instance
* @throws \Exception When an Exception occurs during processing
*/
![Page 63: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/63.jpg)
/**
* Handles a Request to convert it to a Response.
*
* When $catch is true, the implementation must catch all exceptions
* and do its best to convert them to a Response instance.
*
* @param Request $request A Request instance
* @param integer $type The type of the request (MASTER_REQUEST or SUB_REQUEST)
* @param Boolean $catch Whether to catch exceptions or not
* @return Response A Response instance
* @throws \Exception When an Exception occurs during processing
*/
![Page 64: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/64.jpg)
http://stackphp.com
![Page 65: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/65.jpg)
Used by
● Symfony● Laravel● Drupal● phpBB
![Page 66: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/66.jpg)
A Silex App *is* Pimple
● Simple container with ~80 lines of code● ArrayAccess interface● *IoC container, for dependency injection● Allows you to loosely couple your classes
*IoC = Inversion of Control
![Page 67: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/67.jpg)
![Page 68: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/68.jpg)
![Page 69: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/69.jpg)
Twig
![Page 70: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/70.jpg)
Better than mixingPHP & HTML
![Page 71: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/71.jpg)
![Page 72: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/72.jpg)
Separation
![Page 73: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/73.jpg)
Variables{{ title }}
{{ var|escape }}
{{ foo.bar }}
![Page 74: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/74.jpg)
Control blocks
{% for user in users %} * {{ user.name }}{% else %} No users have been found.{% endfor %}
![Page 75: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/75.jpg)
Filters
{{ name|striptags|title|reverse }}
![Page 76: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/76.jpg)
Includes
{% include 'sidebar.html' %}
![Page 77: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/77.jpg)
Inheritancebase.twig<title>{% block title %}My site{% endblock %}</title><div>{% block content %}{% endblock %}</div>
child.twig{% extends "base.twig" %}{% block title %}Contact us{% endblock %}{% block content %}Email{% endblock %}
![Page 78: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/78.jpg)
Twig in the wild
![Page 79: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/79.jpg)
![Page 80: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/80.jpg)
![Page 81: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/81.jpg)
![Page 82: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/82.jpg)
Silex & Twig
Silex comes with a bridge that provides a Twig service
Register the service and you get twig
![Page 83: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/83.jpg)
"require": { "twig/twig": ">=1.8,<2.0-dev"}
$app->register(new Silex\Provider\TwigServiceProvider(), array( 'twig.path' => __DIR__ . '/views',));
$app->get('/hello/{name}', function ($name) use ($app) { return $app['twig']->render('hello.twig', array( 'name' => $name, ));});
![Page 84: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/84.jpg)
Silex in the wildWordPress Example
![Page 85: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/85.jpg)
![Page 86: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/86.jpg)
PHP Dorset site
● silex● twig
![Page 87: Silex and Twig · D - Dependency Inversion Principle. 3. 3-ish. 1.2. 10. 3. Single Responsibility Principle One reason to change. Open / Closed Principle Open for extension Closed](https://reader030.vdocument.in/reader030/viewer/2022041019/5ecd82146466ba57552f1940/html5/thumbnails/87.jpg)
Any Questions & Thank You
Feedback: goo.gl/TnkeCTSildes: goo.gl/ilu1rl
Alex (@rossey) & Dave (@dave1010)wearebase.com/hiring
Tweet Jon Ginn (@jonginn) and tell him what he missed!