$ php composer.phar require slim/twig-view
app/settings.php
<?php declare(strict_types=1); use DI\ContainerBuilder; use Monolog\Logger; return function (ContainerBuilder $containerBuilder) { // Global Settings Object $containerBuilder->addDefinitions([ 'settings' => [ 'displayErrorDetails' => true, // Should be set to false in production 'logger' => [ 'name' => 'slim-app', 'path' => isset($_ENV['docker']) ? 'php://stdout' : __DIR__ . '/../logs/app.log', 'level' => Logger::DEBUG, ], 'twig' => [ 'path' => __DIR__ . '/../src/Resource/template', 'cache' => __DIR__ . '/../var/cache/twig' ], ], ]); };
app/dependencies.php
use Slim\Views\Twig; use Twig\Loader\FilesystemLoader;
$containerBuilder->addDefinitions([ Twig::class => function (ContainerInterface $c) { $settings = $c->get('settings'); $twigSettings = $settings['twig']; $loader = new FilesystemLoader( $twigSettings['path'], ); $options = [ 'cache' => $twigSettings['cache'], 'auto_reload' => true, // 本番環境ではfalse推奨 ]; $view = new Twig( $loader, $options ); return $view; }, ]);
src/Application/Actions/Action.php
use Slim\Views\Twig;
/** * @var Twig */ protected $view; /** * @param LoggerInterface $logger * @param Twig $view */ public function __construct( LoggerInterface $logger, Twig $twig ) { $this->logger = $logger; $this->view = $twig; }
src/Application/Actions/User/UserAction.php
use Slim\Views\Twig;
/** * @param LoggerInterface $logger * @param Twig $view * @param UserRepository $userRepository */ public function __construct(LoggerInterface $logger, Twig $view, UserRepository $userRepository) { parent::__construct($logger, $view); $this->userRepository = $userRepository; }
src/Application/Actions/User/ListUsersAction.php
<?php declare(strict_types=1); namespace App\Application\Actions\User; use Psr\Http\Message\ResponseInterface as Response; class ListUsersAction extends UserAction { /** * {@inheritdoc} */ protected function action(): Response { $users = $this->userRepository->findAll(); $this->logger->info("Users list was viewed."); return $this->view->render($this->response, 'list_users.twig', [ 'users' => $users, ] ); } }