COMMUNITY! Evan Coury ( ) Matthew Weier O'Phinney ( ) Jakub Zalas ( ) Ben Tadiar ( ) Rob Allen ( ) Gary Hockin ( ) Ben Scholzen ( ) Paul M Jones ( ) Fabien Potencier ( ) Taylor Otwell ( ) EvanDotPro mwop jakub_zalas BenExile akrabat GeeH DASPRiD pmjones fabpot taylorotwell
DOES IT SOLVE? WHAT PROBLEMS DOES IT SOLVE? Currently, existing frameworks impose a 1-to-1 relationship between your framework app and the framework vendor. What issues does this cause? Vendor lock-in!
community e ort! It’s using existing code from existing frameworks that you already know. Your app code belongs to you, not to your framework. As PHP grows, PPI will grow (Zend3, Aura3, Symfony3).
swappable 3rd-party components. Components may be PSR-ready or potential candidates (Router). Spearhead PHP-FIG concepts and ideas with a real-life POC for these standards.
2 years now, but PSR-6 still not nished. namespace PPI\CacheModule\Cache\Driver; use PPI\CacheModule\Cache\CacheItem; use PPI\CacheModule\Cache\CacheInterface; class RedisCache implements CacheInterface { // ... } Other implementations: APC, Disk, Memcached, Memory, Xcache.
PSR-7 ready! You can easily adding more libraries into the mix when they implement PSR-7. When consuming frameworks like (ZF2, SF2, Aura2) - that don't support PSR-7 yet - PPI bridges the gap for you.
"^0.11" } PPI/Framework/Http/Request.php use Psr\Http\Message\RequestInterface; use Symfony\Component\HttpFoundation\Request as SymfonyHttpRequest; /** * HTTP messages consist of requests from a client to a server and * responses from a server to a client. This interface defines the * methods common to each. */ class Request extends SymfonyHttpRequest implements RequestInterface { // ... }
(Routing PSR?). Mediate routing and request information from PPI to Aura (for example). If a Routing PSR is created, we get to throw away a lot of code
{ public function getRoutes() { return $this->getSymfonyRoutes(); // or return $this->getAuraRoutes(); } public function getAuraRoutes() { return $this->loadAuraRoutes(__DIR__ . '/resources/routes/aura.php'); } public function getSymfonyRoutes() { return $this->loadYamlRoutes(__DIR__ . '/resources/routes/symfony.yml'); } public function getConfig() { return $this->loadConfig(__DIR__ . '/resources/config/config.yml'); }