3. PHP 5.3
●
Namespace declaration:
–
–
●
namespace LukasRosenstockEvents;
class BarCamp { }
Use classes:
–
–
or
–
use LukasRosenstockEventsBarCamp;
–
●
$bcrm13 = new LukasRosenstockEventsBarCamp;
$bcrm13 = new BarCamp;
PSR0 Guideline: namespace = path
–
●
/LukasRosenstock/Events/BarCamp.php
Autoloading → magic 'require' when needed
4. Composer & Packagist
●
Per-project dependency management for
frameworks, libraries etc.
–
●
Command-line tool composer.phar
–
●
Dependencies are not included in project repository
composer install
JSON configuration files composer.json for
each package
–
–
●
Public package names → http://packagist.org/
Custom repositories and downloads
http://getcomposer.org/
5. Silex Microframework
●
Microframework = single PHP file for multiple
URL patterns
–
–
●
Good for RESTful APIs
Requires URL rewriting in webserver
Implementation with closures
–
–
$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 = new SilexApplication;
$app->run();
http://silex.sensiolabs.org/
6. 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/
7. Guzzle HTTP Library
●
OOP abstraction layer for libcurl
●
Extendable with plugins
●
Service definitions for webservice API clients
–
●
Amazon WebServices PHP SDK
Example:
–
–
$client->setDefaultHeaders(array('Authorization' =>
'Bearer '.$accessToken));
–
$response = $client->get('/event/bcrm13')->send();
–
●
$client = new
GuzzleHttpClient('http://api.example.com/');
$eventData = $response->json();
http://guzzlephp.org/
8. 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:
–
–
/** @Column(type="string") **/ private $name;
–
●
/** @Id @Column(type="integer") **/ private $id;
/** @OneToOne(targetEntity="User") **/ private
$organizer;
Creating Entity:
–
$event = new LukasRosenstockEventsBarCamp;
–
$em->persist($event); // em = EntityManager
–
$em->flush();