News of the Symfony2 world
Fabien Potencier
The Symfony2 Philosophy
Be as easy as possible for newcomers
and as flexible as possible for advanced users
SymfonyComponents
 SymfonyFramework
CssSelector
use SymfonyComponentsCssSelectorParser;

Parser::cssToXpath('h4 > a:contains("foo")');
use SymfonyComponentsCssSelectorParser;

$document = new DOMDocument();
$document->loadHTMLFile('...');
$xpath = new DOMXP...
DomCrawler
use SymfonyComponentsDomCrawlerCrawler;

$crawler = new Crawler($html);
addContent()
addHtmlContent()
 addXmlContent()
  addDocument()
  addNodeList()
    addNodes()
     addNode()

     add()
filter()
     filterXpath()

           eq()
         reduce()
     first() / last()
        siblings()
nextAll() / previo...
$link = $crawler->filter("h1 > h2");

$link = $crawler->filter("h1")->eq(1);
isEmpty()
  each()
  attr()
  text()
extract()
$crawler
  ->filter('a.smart')
  ->each(function ($node)
    {
      print $node->getAttribute('href')."n";
    });
$crawler
  ->filter('a')
  ->extract(array('_text', 'href'))
;
selectLink() / selectButton()
$crawler->selectLink("Greet Lucas");
$crawler->selectButton('submit');
$crawler->filter('a:contains("Greet")')->eq(1);
$link = $crawler
  ->selectLink("Greet Lucas")
  ->link();
$form = $crawler->filter(
  'button:contains("submit")')->form();
// fill an input field
$form['name'] = 'Lucas';

// select an option or a radio
$form['country']->select('France');

// ti...
$form->getValues() / $form->getFiles()

array('article[title]' => 'Title', ...)

$form->getPhpValues() / $form->getPhpFile...
Browser
http://www.github.com/fabpot/Goutte
Finder
use SymfonyComponentsFinderFinder;

$finder = new Finder();
$finder
    ->files()
    ->in(__DIR__)
    ->...()
    ->sort...
$finder
    ->name('*.php')
    ->depth('<= 1')
    ->date('>= yesterday')
    ->size('<= 1K')
    ->filter(function (SplF...
foreach ($finder as $file) {
    print $file->getRealpath()."n";
}

$files = iterator_to_array($finder);

$count = iterato...
use SymfonyComponentsFinderFinder;

$s3 = new Zend_Service_Amazon_S3($key, $sct);
$s3->registerStreamWrapper("s3");

$find...
HttpKernel: The framework construction kit
namespace SymfonyComponentsHttpKernel;
interface HttpKernelInterface
{
  const MASTER_REQUEST = 1;
  const FORWARDED_REQUE...
Testing
Profiling
and …
What’s next?
Questions?
Sensio S.A.
   92-98, boulevard Victor Hugo
       92 115 Clichy Cedex
             FRANCE
      Tél. : +33 1 40 99 80 80
...
Upcoming SlideShare
Loading in …5
×

News of the Symfony2 World

10,936 views

Published on

Published in: Technology
2 Comments
7 Likes
Statistics
Notes
No Downloads
Views
Total views
10,936
On SlideShare
0
From Embeds
0
Number of Embeds
2,961
Actions
Shares
0
Downloads
166
Comments
2
Likes
7
Embeds 0
No embeds

No notes for slide

News of the Symfony2 World

  1. 1. News of the Symfony2 world Fabien Potencier
  2. 2. The Symfony2 Philosophy
  3. 3. Be as easy as possible for newcomers and as flexible as possible for advanced users
  4. 4. SymfonyComponents SymfonyFramework
  5. 5. CssSelector
  6. 6. use SymfonyComponentsCssSelectorParser; Parser::cssToXpath('h4 > a:contains("foo")');
  7. 7. use SymfonyComponentsCssSelectorParser; $document = new DOMDocument(); $document->loadHTMLFile('...'); $xpath = new DOMXPath($document); $expr = Parser::cssToXpath('a.smart'); $nodes = $xpath->query($expr); foreach ($nodes as $node) { printf("%s (%s)n", $node->nodeValue, $node- >getAttribute('href')); }
  8. 8. DomCrawler
  9. 9. use SymfonyComponentsDomCrawlerCrawler; $crawler = new Crawler($html);
  10. 10. addContent() addHtmlContent() addXmlContent() addDocument() addNodeList() addNodes() addNode() add()
  11. 11. filter() filterXpath() eq() reduce() first() / last() siblings() nextAll() / previousAll() parents() / children()
  12. 12. $link = $crawler->filter("h1 > h2"); $link = $crawler->filter("h1")->eq(1);
  13. 13. isEmpty() each() attr() text() extract()
  14. 14. $crawler ->filter('a.smart') ->each(function ($node) { print $node->getAttribute('href')."n"; });
  15. 15. $crawler ->filter('a') ->extract(array('_text', 'href')) ;
  16. 16. selectLink() / selectButton()
  17. 17. $crawler->selectLink("Greet Lucas");
  18. 18. $crawler->selectButton('submit');
  19. 19. $crawler->filter('a:contains("Greet")')->eq(1);
  20. 20. $link = $crawler ->selectLink("Greet Lucas") ->link();
  21. 21. $form = $crawler->filter( 'button:contains("submit")')->form();
  22. 22. // fill an input field $form['name'] = 'Lucas'; // select an option or a radio $form['country']->select('France'); // tick a checkbox $form['like_symfony']->tick(); // upload a file $form['photo']->upload('/path/to/lucas.jpg');
  23. 23. $form->getValues() / $form->getFiles() array('article[title]' => 'Title', ...) $form->getPhpValues() / $form->getPhpFiles() array('article' => array('title' => 'Title', ...))
  24. 24. Browser
  25. 25. http://www.github.com/fabpot/Goutte
  26. 26. Finder
  27. 27. use SymfonyComponentsFinderFinder; $finder = new Finder(); $finder ->files() ->in(__DIR__) ->...() ->sortByName() ;
  28. 28. $finder ->name('*.php') ->depth('<= 1') ->date('>= yesterday') ->size('<= 1K') ->filter(function (SplFileInfo $file) { return strlen($file->getBasename()) < 9; }) ;
  29. 29. foreach ($finder as $file) { print $file->getRealpath()."n"; } $files = iterator_to_array($finder); $count = iterator_count($finder);
  30. 30. use SymfonyComponentsFinderFinder; $s3 = new Zend_Service_Amazon_S3($key, $sct); $s3->registerStreamWrapper("s3"); $finder = new Finder(); $finder ->name('photos*') ->size('< 100K') ->date('since 1 hour ago') ->in('s3://bucket-name') ;
  31. 31. HttpKernel: The framework construction kit
  32. 32. namespace SymfonyComponentsHttpKernel; interface HttpKernelInterface { const MASTER_REQUEST = 1; const FORWARDED_REQUEST = 2; const EMBEDDED_REQUEST = 3; public function handle( Request $request = null, $type = self::MASTER_REQUEST, $raw = false); public function getRequest(); }
  33. 33. Testing
  34. 34. Profiling
  35. 35. and …
  36. 36. What’s next?
  37. 37. Questions?
  38. 38. Sensio S.A. 92-98, boulevard Victor Hugo 92 115 Clichy Cedex FRANCE Tél. : +33 1 40 99 80 80 Contact Fabien Potencier fabien.potencier at sensio.com http://www.sensiolabs.com/ http://www.symfony-project.org/ http://fabien.potencier.org/

×