SlideShare ist ein Scribd-Unternehmen logo
1 von 19
Downloaden Sie, um offline zu lesen
An Introduction to
Christian Zenker @xopn mail@xopn.de
Symfony Components
● About 20 stand-alone packages with one specific purpose
● Mostly independent from each other
● Usable in almost any PHP project
● Unit tested and well documented
http://symfony.com/components
● YAML is a human-readable data
serialization format like XML or
JSON
YAML Component
user:
name: Homer Simpson
# unsure about age
age: 40
kids: ["Bart", "Lisa", "Maggie"]
quotes:
- |
Operator! Give me the
number for 911!
- |
Internet? Is that thing
still around?"
http://symfony.com/doc/current/components/console/introduction.html
$yaml =
file_get_contents('users.yml');
$parser = new Parser();
$data = $parser->parse($yaml);
$data['user']['wife'] = 'Marge';
$dumper = new Dumper();
$yaml = $dumper->dump($data, 2);
file_put_contents(
'users.yml', $data
);
Console Component
● Write console programs in PHP
● Clean architecture
● Parses arguments and options
● Easily extensible
● Helpers for
– progress bars
– tabular data
– interactive questions
– colored output
me@home> php console.php demo:hello John
Hello John
me@home> php console.php demo:hello
What's your name? John
Hello John
me@home> php sandwich.php make
What? Make it yourself!
me@home> php sandwich.php make --force
Ok.
[=======>---------] 42%
Console Component (II)
class GreetCommand extends Command {
protected function configure() {
$this
->setName('demo:greet')
->setDescription('Greet someone')
->addArgument(
'name',
InputArgument::OPTIONAL,
'Who do you want to greet?'
)
->addOption(
'yell',
null,
InputOption::VALUE_NONE,
'If set, the task will yell in uppercase letters'
)
;
}
// ...
Console Component (III)
// ...
protected function execute(InputInterface $input, OutputInterface $output) {
$name = $input->getArgument('name');
if ($name) {
$text = 'Hello '.$name;
} else {
$text = 'Hello';
}
if ($input->getOption('yell')) {
$text = strtoupper($text);
}
$output->writeln($text);
}
}
http://symfony.com/doc/current/components/console/introduction.html
Finder Component
http://symfony.com/doc/current/components/finder.html
http://symfony.com/doc/current/components/filesystem.html
● Simple wrapper for PHP functions
● Exceptions on error
● Batch processing$finder = new Finder();
$iterator = $finder
->files()
->name('*.php')
->depth(0)
->size('>= 1K')
->in(__DIR__);
foreach ($iterator as $file) {
/** @var SplFileInfo $file */
$file->getRealpath();
}
● Search filesystem or Amazon S3
● Uses `find` or PHP functions
$filesystem = new Filesystem();
$filesystem->mkdir($dirs, 0777);
$filesystem->touch($files, time() - 86400);
$filesystem->remove($dir);
$filesystem->chown($files, $user);
$filesystem->symlink($originDir, $targetDir);
$filesystem->mirror($originDir,$targetDir);
Filesystem Component
CssSelector Component
● Converts CSS selectors into Xpath ● Query XML and HTML pages
● Use for simple functional tests
Goutte
echo CssSelector::toXPath('div.item > h4 > a');
descendant-or-self::div[contains(
concat(' ',normalize-space(@class), ' '),
' item ')]/h4/a
https://github.com/fabpot/Goutte
http://symfony.com/doc/current/components/css_selector.html
$client = new Client();
$crawler = $client->request(
'GET', 'http://example.com'
);
$link = $crawler->selectLink('Users')->link();
$crawler = $client->click($link);
$users = $crawler->filter('#users > li');
echo count($users) . ' online';
● CSS is better readable
● Xpath is more powerful
Symfony Framework
● an HTTP framework
● MVC framework? Sure, why not.
● Based on Symfony Components
and well-established third-party
libraries
● Backwards compatibility starting
with 2.3
● Console powered
● Environment aware (production,
development, testing)
● Configuration via YAML, XML,
JSON, annotations
● Fast and low memory footprint
ClassLoader
Config
Console
DependencyInjection
EventDispatcher
Finder
Form
HttpFoundation
HttpKernel
Intl
Routing
Security
Validator
...
SF Components
SwiftMailer
Doctrine
Monolog
Assetic
Twig
FrameworkBundle
SwiftmailerBundle
GeneratorBundle
DoctrineBundle
WebProfiler
Bundle
AsseticBundle Security
Bundle
...
...
GET / HTTP/1.1
Host: example.com
Accept: text/html
HTTP/1.1 200 OK
Content-Type: text/html
<!DOCTYPE html>
<p>Hello World</p>
Browser
GET / HTTP/1.1
HTTP/1.1 200 OK
Application
index.php
Symfony2 Kernel
Routing
Request URI
Controller::action
Request
Object
Response
Object
GET / HTTP/1.1
HTTP/1.1 200 OK
Application
index.php
Symfony2 Kernel
Routing
Request URI
Controller::action
Request
Object
Response
Object
Firewall
Caching
Event Handling
Controller
class MainController extends Controller {
public function helloAction($name) {
return $this->render(
'AcmeHelloBundle:Main:hello.html.twig',
array('name' => $name)
);
}
}
hello:
path: /hello/{name}
defaults:
_controller: AcmeHelloBundle:Main:hello
http://example.com/hello/world
<!DOCTYPE html>
<h1>Hello {{ name }}!</h1>
<p>Also see our
<a href="{{ path('route_name') }}">
other pages
</a>
</p>
<ul>
{% for i in 0..10 if i %2 == 0 %}
<li>{{ i }} is an even number</li>
{% endfor %}
</ul>
Service Container
class AntispamService {
/** doctrine entity manager */
protected $em;
protected $max;
public function __construct($em, $max) {
$this->em = $em;
$this->max = $max
}
public function isCommentSpam($string) {
$words = explode(' ', $string);
$dql = 'SELECT w FROM AcmeHelloBundle:Word WHERE w.word IN (?)';
$query = $this->em->createQuery($dql);
$query->setParameter(0, $words);
$blackWords = $query->execute();
return count($blackWords) > $this->max;
}
}
Service Container (II)
services:
acme_hello.antispam:
class: AcmeHelloBundleAntispamService
arguments:
- @doctrine.orm.entity_manager
- %max_blacklist_words%
public function indexAction($comment) {
$service = $this->get('acme_hello.antispam');
if($service->isCommentSpam()) {
$response = new Response();
$response->setStatusCode('403');
$response->setContent('Get off my lawn');
return $response;
}
// ... do something ...
}
Further Reading
● symfony.com
– Official homepage with
documentation, etc.
● fabien.potencier.org
– The fancy parts
● silex.sensiolabs.org
– Microframework (the missing link
between Components and
Framework)
● knpbundles.com
– Database with additional bundles
– StofDoctrineExtensionsBundle
– LiipImagineBundle
– FOQElasticaBundle
– DoctrineFixturesBundle
?Questions?
!Thank you for your
attention
Christian Zenker
AOE GmbH
http://xopn.de
mail@xopn.de
Twitter @xopn

Weitere Àhnliche Inhalte

Was ist angesagt?

Modern Perl
Modern PerlModern Perl
Modern PerlDave Cross
 
PHP7 Presentation
PHP7 PresentationPHP7 Presentation
PHP7 PresentationDavid Sanchez
 
PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...webhostingguy
 
Web Development Course: PHP lecture 4
Web Development Course: PHP  lecture 4Web Development Course: PHP  lecture 4
Web Development Course: PHP lecture 4Gheyath M. Othman
 
Lumberjack XPath 101
Lumberjack XPath 101Lumberjack XPath 101
Lumberjack XPath 101Thomas Weinert
 
Web Development Course: PHP lecture 3
Web Development Course: PHP lecture 3Web Development Course: PHP lecture 3
Web Development Course: PHP lecture 3Gheyath M. Othman
 
Database schema management in Ruby apps
Database schema management in Ruby appsDatabase schema management in Ruby apps
Database schema management in Ruby appsVsevolod Romashov
 
New in php 7
New in php 7New in php 7
New in php 7Vic Metcalfe
 
Doing more with LESS
Doing more with LESSDoing more with LESS
Doing more with LESSjsmith92
 
PHP POWERPOINT SLIDES
PHP POWERPOINT SLIDESPHP POWERPOINT SLIDES
PHP POWERPOINT SLIDESIsmail Mukiibi
 
RESTful web services
RESTful web servicesRESTful web services
RESTful web servicesTudor Constantin
 
Inside Bokete: Web Application with Mojolicious and others
Inside Bokete:  Web Application with Mojolicious and othersInside Bokete:  Web Application with Mojolicious and others
Inside Bokete: Web Application with Mojolicious and othersYusuke Wada
 
Class 2 - Introduction to PHP
Class 2 - Introduction to PHPClass 2 - Introduction to PHP
Class 2 - Introduction to PHPAhmed Swilam
 
Intro to php
Intro to phpIntro to php
Intro to phpSp Singh
 
Php Tutorial | Introduction Demo | Basics
 Php Tutorial | Introduction Demo | Basics Php Tutorial | Introduction Demo | Basics
Php Tutorial | Introduction Demo | BasicsShubham Kumar Singh
 

Was ist angesagt? (20)

Modern Perl
Modern PerlModern Perl
Modern Perl
 
Php workshop L03 superglobals
Php workshop L03 superglobalsPhp workshop L03 superglobals
Php workshop L03 superglobals
 
PHP7 Presentation
PHP7 PresentationPHP7 Presentation
PHP7 Presentation
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
Php workshop L04 database
Php workshop L04 databasePhp workshop L04 database
Php workshop L04 database
 
Using PHP
Using PHPUsing PHP
Using PHP
 
PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...PHP and MySQL PHP Written as a set of CGI binaries in C in ...
PHP and MySQL PHP Written as a set of CGI binaries in C in ...
 
Web Development Course: PHP lecture 4
Web Development Course: PHP  lecture 4Web Development Course: PHP  lecture 4
Web Development Course: PHP lecture 4
 
Lumberjack XPath 101
Lumberjack XPath 101Lumberjack XPath 101
Lumberjack XPath 101
 
Web Development Course: PHP lecture 3
Web Development Course: PHP lecture 3Web Development Course: PHP lecture 3
Web Development Course: PHP lecture 3
 
Sa
SaSa
Sa
 
Database schema management in Ruby apps
Database schema management in Ruby appsDatabase schema management in Ruby apps
Database schema management in Ruby apps
 
New in php 7
New in php 7New in php 7
New in php 7
 
Doing more with LESS
Doing more with LESSDoing more with LESS
Doing more with LESS
 
PHP POWERPOINT SLIDES
PHP POWERPOINT SLIDESPHP POWERPOINT SLIDES
PHP POWERPOINT SLIDES
 
RESTful web services
RESTful web servicesRESTful web services
RESTful web services
 
Inside Bokete: Web Application with Mojolicious and others
Inside Bokete:  Web Application with Mojolicious and othersInside Bokete:  Web Application with Mojolicious and others
Inside Bokete: Web Application with Mojolicious and others
 
Class 2 - Introduction to PHP
Class 2 - Introduction to PHPClass 2 - Introduction to PHP
Class 2 - Introduction to PHP
 
Intro to php
Intro to phpIntro to php
Intro to php
 
Php Tutorial | Introduction Demo | Basics
 Php Tutorial | Introduction Demo | Basics Php Tutorial | Introduction Demo | Basics
Php Tutorial | Introduction Demo | Basics
 

Ähnlich wie An Introduction to Symfony

Build powerfull and smart web applications with Symfony2
Build powerfull and smart web applications with Symfony2Build powerfull and smart web applications with Symfony2
Build powerfull and smart web applications with Symfony2Hugo Hamon
 
Simplify your professional web development with symfony
Simplify your professional web development with symfonySimplify your professional web development with symfony
Simplify your professional web development with symfonyFrancois Zaninotto
 
PHP SA 2014 - Releasing Your Open Source Project
PHP SA 2014 - Releasing Your Open Source ProjectPHP SA 2014 - Releasing Your Open Source Project
PHP SA 2014 - Releasing Your Open Source Projectxsist10
 
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 laterHaehnchen
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy CodeRowan Merewood
 
Hands-on with the Symfony2 Framework
Hands-on with the Symfony2 FrameworkHands-on with the Symfony2 Framework
Hands-on with the Symfony2 FrameworkRyan Weaver
 
PhpBB meets Symfony2
PhpBB meets Symfony2PhpBB meets Symfony2
PhpBB meets Symfony2Fabien Potencier
 
Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)
Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)
Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)Muhamad Al Imran
 
Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)
Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)
Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)Muhamad Al Imran
 
Php i basic chapter 3
Php i basic chapter 3Php i basic chapter 3
Php i basic chapter 3Muhamad Al Imran
 
From CakePHP to Laravel
From CakePHP to LaravelFrom CakePHP to Laravel
From CakePHP to LaravelJason McCreary
 
Creating a modern web application using Symfony API Platform Atlanta
Creating a modern web application using  Symfony API Platform AtlantaCreating a modern web application using  Symfony API Platform Atlanta
Creating a modern web application using Symfony API Platform AtlantaJesus Manuel Olivas
 
Python RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutionsPython RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutionsSolution4Future
 
7 Tips on Getting Your Theme Approved the First Time
7 Tips on Getting Your Theme Approved the First Time7 Tips on Getting Your Theme Approved the First Time
7 Tips on Getting Your Theme Approved the First TimeDmitry Mayorov
 
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 easeOscar Merida
 
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 PiJérémy Derussé
 
Hacking IIS - NahamCon.pdf
Hacking IIS - NahamCon.pdfHacking IIS - NahamCon.pdf
Hacking IIS - NahamCon.pdfdistortdistort
 

Ähnlich wie An Introduction to Symfony (20)

Symfony2 revealed
Symfony2 revealedSymfony2 revealed
Symfony2 revealed
 
Build powerfull and smart web applications with Symfony2
Build powerfull and smart web applications with Symfony2Build powerfull and smart web applications with Symfony2
Build powerfull and smart web applications with Symfony2
 
Simplify your professional web development with symfony
Simplify your professional web development with symfonySimplify your professional web development with symfony
Simplify your professional web development with symfony
 
PHP SA 2014 - Releasing Your Open Source Project
PHP SA 2014 - Releasing Your Open Source ProjectPHP SA 2014 - Releasing Your Open Source Project
PHP SA 2014 - Releasing Your Open Source Project
 
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
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
 
Hands-on with the Symfony2 Framework
Hands-on with the Symfony2 FrameworkHands-on with the Symfony2 Framework
Hands-on with the Symfony2 Framework
 
PhpBB meets Symfony2
PhpBB meets Symfony2PhpBB meets Symfony2
PhpBB meets Symfony2
 
Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)
Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)
Php i basic chapter 3 (syahir chaer's conflicted copy 2013-04-22)
 
Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)
Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)
Php i basic chapter 3 (afifah rosli's conflicted copy 2013-04-23)
 
Php i basic chapter 3
Php i basic chapter 3Php i basic chapter 3
Php i basic chapter 3
 
From CakePHP to Laravel
From CakePHP to LaravelFrom CakePHP to Laravel
From CakePHP to Laravel
 
Symfony 4 & Flex news
Symfony 4 & Flex newsSymfony 4 & Flex news
Symfony 4 & Flex news
 
Creating a modern web application using Symfony API Platform Atlanta
Creating a modern web application using  Symfony API Platform AtlantaCreating a modern web application using  Symfony API Platform Atlanta
Creating a modern web application using Symfony API Platform Atlanta
 
Python RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutionsPython RESTful webservices with Python: Flask and Django solutions
Python RESTful webservices with Python: Flask and Django solutions
 
7 Tips on Getting Your Theme Approved the First Time
7 Tips on Getting Your Theme Approved the First Time7 Tips on Getting Your Theme Approved the First Time
7 Tips on Getting Your Theme Approved the First Time
 
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
 
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
 
Hacking IIS - NahamCon.pdf
Hacking IIS - NahamCon.pdfHacking IIS - NahamCon.pdf
Hacking IIS - NahamCon.pdf
 
Basics PHP
Basics PHPBasics PHP
Basics PHP
 

KĂŒrzlich hochgeladen

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
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 WorkerThousandEyes
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
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...apidays
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
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...Miguel AraĂșjo
 
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.pdfsudhanshuwaghmare1
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 

KĂŒrzlich hochgeladen (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
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
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
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...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
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...
 
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
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 

An Introduction to Symfony

  • 1. An Introduction to Christian Zenker @xopn mail@xopn.de
  • 2. Symfony Components ● About 20 stand-alone packages with one specific purpose ● Mostly independent from each other ● Usable in almost any PHP project ● Unit tested and well documented http://symfony.com/components
  • 3. ● YAML is a human-readable data serialization format like XML or JSON YAML Component user: name: Homer Simpson # unsure about age age: 40 kids: ["Bart", "Lisa", "Maggie"] quotes: - | Operator! Give me the number for 911! - | Internet? Is that thing still around?" http://symfony.com/doc/current/components/console/introduction.html $yaml = file_get_contents('users.yml'); $parser = new Parser(); $data = $parser->parse($yaml); $data['user']['wife'] = 'Marge'; $dumper = new Dumper(); $yaml = $dumper->dump($data, 2); file_put_contents( 'users.yml', $data );
  • 4. Console Component ● Write console programs in PHP ● Clean architecture ● Parses arguments and options ● Easily extensible ● Helpers for – progress bars – tabular data – interactive questions – colored output me@home> php console.php demo:hello John Hello John me@home> php console.php demo:hello What's your name? John Hello John me@home> php sandwich.php make What? Make it yourself! me@home> php sandwich.php make --force Ok. [=======>---------] 42%
  • 5. Console Component (II) class GreetCommand extends Command { protected function configure() { $this ->setName('demo:greet') ->setDescription('Greet someone') ->addArgument( 'name', InputArgument::OPTIONAL, 'Who do you want to greet?' ) ->addOption( 'yell', null, InputOption::VALUE_NONE, 'If set, the task will yell in uppercase letters' ) ; } // ...
  • 6. Console Component (III) // ... protected function execute(InputInterface $input, OutputInterface $output) { $name = $input->getArgument('name'); if ($name) { $text = 'Hello '.$name; } else { $text = 'Hello'; } if ($input->getOption('yell')) { $text = strtoupper($text); } $output->writeln($text); } } http://symfony.com/doc/current/components/console/introduction.html
  • 7. Finder Component http://symfony.com/doc/current/components/finder.html http://symfony.com/doc/current/components/filesystem.html ● Simple wrapper for PHP functions ● Exceptions on error ● Batch processing$finder = new Finder(); $iterator = $finder ->files() ->name('*.php') ->depth(0) ->size('>= 1K') ->in(__DIR__); foreach ($iterator as $file) { /** @var SplFileInfo $file */ $file->getRealpath(); } ● Search filesystem or Amazon S3 ● Uses `find` or PHP functions $filesystem = new Filesystem(); $filesystem->mkdir($dirs, 0777); $filesystem->touch($files, time() - 86400); $filesystem->remove($dir); $filesystem->chown($files, $user); $filesystem->symlink($originDir, $targetDir); $filesystem->mirror($originDir,$targetDir); Filesystem Component
  • 8. CssSelector Component ● Converts CSS selectors into Xpath ● Query XML and HTML pages ● Use for simple functional tests Goutte echo CssSelector::toXPath('div.item > h4 > a'); descendant-or-self::div[contains( concat(' ',normalize-space(@class), ' '), ' item ')]/h4/a https://github.com/fabpot/Goutte http://symfony.com/doc/current/components/css_selector.html $client = new Client(); $crawler = $client->request( 'GET', 'http://example.com' ); $link = $crawler->selectLink('Users')->link(); $crawler = $client->click($link); $users = $crawler->filter('#users > li'); echo count($users) . ' online'; ● CSS is better readable ● Xpath is more powerful
  • 9. Symfony Framework ● an HTTP framework ● MVC framework? Sure, why not. ● Based on Symfony Components and well-established third-party libraries ● Backwards compatibility starting with 2.3 ● Console powered ● Environment aware (production, development, testing) ● Configuration via YAML, XML, JSON, annotations ● Fast and low memory footprint
  • 11. GET / HTTP/1.1 Host: example.com Accept: text/html HTTP/1.1 200 OK Content-Type: text/html <!DOCTYPE html> <p>Hello World</p> Browser
  • 12. GET / HTTP/1.1 HTTP/1.1 200 OK Application index.php Symfony2 Kernel Routing Request URI Controller::action Request Object Response Object
  • 13. GET / HTTP/1.1 HTTP/1.1 200 OK Application index.php Symfony2 Kernel Routing Request URI Controller::action Request Object Response Object Firewall Caching Event Handling
  • 14. Controller class MainController extends Controller { public function helloAction($name) { return $this->render( 'AcmeHelloBundle:Main:hello.html.twig', array('name' => $name) ); } } hello: path: /hello/{name} defaults: _controller: AcmeHelloBundle:Main:hello http://example.com/hello/world <!DOCTYPE html> <h1>Hello {{ name }}!</h1> <p>Also see our <a href="{{ path('route_name') }}"> other pages </a> </p> <ul> {% for i in 0..10 if i %2 == 0 %} <li>{{ i }} is an even number</li> {% endfor %} </ul>
  • 15. Service Container class AntispamService { /** doctrine entity manager */ protected $em; protected $max; public function __construct($em, $max) { $this->em = $em; $this->max = $max } public function isCommentSpam($string) { $words = explode(' ', $string); $dql = 'SELECT w FROM AcmeHelloBundle:Word WHERE w.word IN (?)'; $query = $this->em->createQuery($dql); $query->setParameter(0, $words); $blackWords = $query->execute(); return count($blackWords) > $this->max; } }
  • 16. Service Container (II) services: acme_hello.antispam: class: AcmeHelloBundleAntispamService arguments: - @doctrine.orm.entity_manager - %max_blacklist_words% public function indexAction($comment) { $service = $this->get('acme_hello.antispam'); if($service->isCommentSpam()) { $response = new Response(); $response->setStatusCode('403'); $response->setContent('Get off my lawn'); return $response; } // ... do something ... }
  • 17. Further Reading ● symfony.com – Official homepage with documentation, etc. ● fabien.potencier.org – The fancy parts ● silex.sensiolabs.org – Microframework (the missing link between Components and Framework) ● knpbundles.com – Database with additional bundles – StofDoctrineExtensionsBundle – LiipImagineBundle – FOQElasticaBundle – DoctrineFixturesBundle
  • 19. !Thank you for your attention Christian Zenker AOE GmbH http://xopn.de mail@xopn.de Twitter @xopn