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
Symfony\Components Symfony\Framework
CssSelector
use Symfony\Components\CssSelector\Parser;
Parser::cssToXpath('h4 > a:contains("foo")');
use Symfony\Components\CssSelector\Parser;
$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 Symfony\Components\DomCrawler\Crawler;
$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 Symfony\Components\Finder\Finder;
$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 Symfony\Components\Finder\Finder;
$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 Symfony\Components\HttpKernel;
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/