Plates 템플릿에서 Mezzio 프레임워크 설정값 가져오기

 

웹 프레임워크를 사용해 작업을 할때 View쪽에서 파일 업로드 디렉토리와 같은 프로젝트에 설정된 값을 가져와야 하는 경우가 있습니다. Mezzio 프레임워크와 Plates 템플릿을 사용하는 경우 이런 문제는 Plates 템플릿의 확장프로그램을 만들어 해결합니다.

1. App 디렉토리에 Plates 확장프로그램과 팩토리 클래스 작성.

팩토리
<?php

declare(strict_types=1);

namespace App;

use Psr\Container\ContainerInterface;

class ConfigExtensionFactory
{
    public function __invoke(ContainerInterface $container): ConfigExtension
    {
    	// 컨테이너에서 시스템 설정을 배열로 넘겨줌.
        return new ConfigExtension($container->get('config'));
    }
}

확장프로그램
<?php

declare(strict_types=1);

namespace App;

use League\Plates\Engine;
use League\Plates\Extension\ExtensionInterface;

class ConfigExtension implements ExtensionInterface
{
	// 시스템 설정
    private $config;

    public function __construct(array $config)
    {
        $this->config = $config;
    }

    public function register(Engine $engine): void
    {
        $engine->registerFunction('config', [$this, 'getConfig']);
    }

    public function getConfig($key)
    {
    	// 시스템 설정 중 test 값에 있는 것을 사용.
        return $this->config['test'][$key] ?? '';
    }
}

2. dependencies.global.php에 서비스 등록

return [
    …
    'factories'  => [
        …
        App\ConfigExtension::class => App\ConfigExtensionFactory::class,

3. config/autoload에 Plates관련 설정 파일 templates.global.php 생성

<?php

declare(strict_types=1);

return [
    'plates' => [
        'extensions' => [
        	// 추가한 커스텀 확장프로그램 등록
            App\ConfigExtension::class,
        ],
    ],
];

4. 템플릿에서 사용

<script type="text/javascript" src="/js/front.js?v=<?= $this->config('aaa'); ?>"></script>