Post on 15-Jan-2015
description
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/