Zend Framework
ZF v1: MVCアーキテクチャ
ZF v2: MOVEアーキテクチャ、namespace
ZF v3: PHP7対応
★ServiceManagerによるDI
namespace Blog\Model;
interface PostRepositoryInterface
{
public function findAllPosts();
}
namespace Blog\Model;
class PostRepository implements PostRepositoryInterface
{
public function findAllPosts() { ... }
}
namespace Blog\Controller;
use Blog\Model\PostRepositoryInterface;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class ListController extends AbstractActionController
{
private $postRepository;
public function __construct(PostRepositoryInterface $postRepository)
{
$this->postRepository = $postRepository;
}
public function indexAction()
{
return new ViewModel([
'posts' => $this->postRepository->findAllPosts(),
]);
// 或いは
return [
'posts' => $this->postRepository->findAllPosts(),
];
}
}
module.config.php
namespace Blog;
use Zend\ServiceManager\Factory\InvokableFactory;
return [
'controllers' => [
'factories' => [
Controller\ListController::class
=> Factory\ListControllerFactory::class,
],
],
'service_manager' => [
'aliases' => [
Model\PostRepositoryInterface::class => Model\PostRepository::class,
],
'factories' => [
Model\PostRepository::class => InvokableFactory::class,
],
],
...
];
namespace Blog\Factory;
use Blog\Controller\ListController;
use Blog\Model\PostRepositoryInterface;
use Interop\Container\ContainerInterface;
use Zend\ServiceManager\Factory\FactoryInterface;
class ListControllerFactory implements FactoryInterface
{
public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
{
return new ListController($container->get(PostRepositoryInterface::class));
}
}