PHP Frameworks, Libraries & Tools - BarCamp RheinMain 2013
-
Upload
lukas-rosenstock -
Category
Technology
-
view
4.581 -
download
0
Transcript of PHP Frameworks, Libraries & Tools - BarCamp RheinMain 2013
PHP Frameworks, Libraries & Tools
BarCamp Rhein Main 2013Lukas Rosenstock
Overview
● PHP 5.3: Namespaces, Autoloading and PSR-0● Composer & Packagist Dependency Manager● Silex Microframework & symfony components● Twig Template Engine● Guzzle HTTP Library● Doctrine Object-Relational-Mapper
PHP 5.3
● Namespace declaration:– namespace LukasRosenstock\Events;
– class BarCamp { }
● Use classes:– $bcrm13 = new LukasRosenstock\Events\BarCamp;
– or– use LukasRosenstock\Events\BarCamp;
– $bcrm13 = new BarCamp;
● PSR0 Guideline: namespace = path– /LukasRosenstock/Events/BarCamp.php
● Autoloading → magic 'require' when needed
Composer & Packagist
● Per-project dependency management for frameworks, libraries etc.– Dependencies are not included in project repository
● Command-line tool composer.phar– composer install
● JSON configuration files composer.json for each package– Public package names → http://packagist.org/
– Custom repositories and downloads
● http://getcomposer.org/
Silex Microframework
● Microframework = single PHP file for multiple URL patterns– Good for RESTful APIs
– Requires URL rewriting in webserver
● Implementation with closures– $app = new Silex\Application;
– $app->get('/event/{id}', function($id) { return 'You have requested event '.$id; });
– $app->post('/event/{id}', function($id, Request $r) { return 'Event updated with '.$r->getContent(); });
– $app->run();
● http://silex.sensiolabs.org/
Twig Template Engine
● Separation logic and view● Frontend developers should not write PHP
– Twig has own syntax for conditions, loops etc.
● Template:– <h1>Event {{name}}</h1>
– {% if is_today %}<p>Happening today.</p>{% endif %}
● PHP Code:– $twig = new \Twig_Environment(new
\Twig_Loader_Filesystem('/views'));
– Return $twig->render('event.twig.html', array('name' => $event->getName(), 'is_today' => $event->getDate()==$now);
● http://twig.sensiolabs.org/
Guzzle HTTP Library
● OOP abstraction layer for libcurl● Extendable with plugins● Service definitions for webservice API clients
– Amazon WebServices PHP SDK
● Example:– $client = new
Guzzle\Http\Client('http://api.example.com/');
– $client->setDefaultHeaders(array('Authorization' => 'Bearer '.$accessToken));
– $response = $client->get('/event/bcrm13')->send();
– $eventData = $response->json();
● http://guzzlephp.org/
Doctrine Object-Relational-Mapper
● 1 SQL table = 1 PHP class– Mapping of fields and relations defined with
annotations (comments) or in external configuration files
● Sample fields:– /** @Id @Column(type="integer") **/ private $id;
– /** @Column(type="string") **/ private $name;
– /** @OneToOne(targetEntity="User") **/ private $organizer;
● Creating Entity:– $event = new LukasRosenstock\Events\BarCamp;
– $em->persist($event); // em = EntityManager
– $em->flush();
Doctrine Object-Relational-Mapper
● Fetching Entity:– $event = $em-
>getRepository('LukasRosenstock\Events\BarCamp')->findOneById(1);
● Modifying Entity:– $user = new LukasRosenstock\Events\Organizer;
– $event->setOrganizer($user);
– $em->flush();
● http://www.doctrine-project.org/
Thank you!
Questions?!