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));

}

}