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 DOMXPath($document);

$expr = Parser::cssToXpath('a.smart');
$nodes = $xpath->query($expr);

foreach ($nodes as $node)
{
  printf("%s (%s)n", $node->nodeValue, $node-
>getAttribute('href'));
}
DomCrawler
use SymfonyComponentsDomCrawlerCrawler;

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

     add()
filter()
     filterXpath()

           eq()
         reduce()
     first() / last()
        siblings()
nextAll() / previousAll()
  parents() / children()
$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');

// tick a checkbox
$form['like_symfony']->tick();

// upload a file
$form['photo']->upload('/path/to/lucas.jpg');
$form->getValues() / $form->getFiles()

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

$form->getPhpValues() / $form->getPhpFiles()

 array('article' => array('title' =>
'Title', ...))
Browser
http://www.github.com/fabpot/Goutte
Finder
use SymfonyComponentsFinderFinder;

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

$files = iterator_to_array($finder);

$count = iterator_count($finder);
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')
;
HttpKernel: The framework construction kit
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();
}
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

              Contact
          Fabien Potencier
   fabien.potencier at sensio.com


  http://www.sensiolabs.com/
http://www.symfony-project.org/
 http://fabien.potencier.org/

News of the Symfony2 World