3. microphp.org
I am a PHP developer
• I am not a Zend Framework or Symfony or CakePHP developer
• I think PHP is complicated enough
I like building small things
• I like building small things with simple purposes
• I like to make things that solve problems
• I like building small things that work together to solve larger problems
I want less code, not more
• I want to write less code, not more
• I want to manage less code, not more
• I want to support less code, not more
• I need to justify every piece of code I add to a project
I like simple, readable code
• I want to write code that is easily understood
• I want code that is easily verifiable
24. ZendExpressiveRouterRouterInterface
• public function addRoute(Route $route);
• public function match(Request $request);
• public function generateUri($name, array $substitutions = []);
InteropContainerContainerInterface
• public function get($id);
• public function has($id);
ZendExpressiveTemplateTemplateRendererInterface
• public function render($name, $params = []);
• public function addPath($path, $namespace = null);
• public function getPaths();
• public function addDefaultParam($templateName, $param, $value);
ZendStratigilityFinalHandler
29. Invokable Factory
<?php
class iClass
{
public function method1()
{
return time();
}
}
<?php
class fClass
{
private $adapter;
public function __construct($adapter)
{
$this->adapter=$adapter;
}
public function method1()
{
return $this
->adapter
->someMethod();
}
}
//--------------------------
class fClassFactory
{
public function __invoke()
{
$adapter=new NSAdapterClass;
return new fClass($adapter);
}
}
32. <?php
namespace AppAction;
use InteropContainerContainerInterface;
use ZendDbAdapterAdapterInterface;
use ZendExpressiveTemplateTemplateRendererInterface;
class ListActionFactory
{
public function __invoke(ContainerInterface $container)
{
$template = ($container->has(TemplateRendererInterface::class))
? $container->get(TemplateRendererInterface::class)
: null;
$adapter = ($container->has(AdapterInterface::class))
? $container->get(AdapterInterface::class)
: null;
return new ListAction($template,$adapter);
}
}
33. <?php
namespace AppAction;
use ...
class ListAction
{
private $adapter;
private $template;
public function __construct(TemplateRendererInterface $template, $adapter)
{
$this->adapter = $adapter;
$this->template = $template;
}
public function __invoke(
ServerRequestInterface $request,
ResponseInterface $response,
callable $next = null
){
$statement = $this->adapter->query('select * from profile');
$users = $statement->execute();
return new HtmlResponse(
$this->template->render('app::list', ['users' => $users])
);
}
}
34.
35. <?php
namespace AppAction;
use ZendDiactorosResponseJsonResponse;
use PsrHttpMessageResponseInterface;
use PsrHttpMessageServerRequestInterface;
class PingAction
{
public function __invoke(
ServerRequestInterface $request,
ResponseInterface $response,
callable $next = null)
{
return new JsonResponse(['ack' => time()]);
}
}