
템플릿 엔진은 PHP 페이지가 변수에 저장한 데이터를 가져와서, 브라우저로 보내는 HTML을 생성하기 위해 템플릿에 데이터를 추가한다. 이것을 템플릿을 렌더링rendering한다고 한다.
Twig를 사용하는 모든 페이지는 Twig 라이브러리에서 두 개의 객체를 생성해야 한다.
$loader = new Twig\Loader\FilesystemLoader(APP_ROOT . '/templates'); // 1. Twig\Loader\FilesystemLoader 클래스는 템플릿 파일을 로드하기 위해 로더 객체를 생성한다. 이것은 템플릿을 가진 폴더의 경로가 필요하다. $twig = new Twig\Environment($loader); // 2. Twig\Environment 클래스는 Twig 환경 객체를 생성한다. 이것은 템플릿의 올바른 위치에 데이터를 추가한다. 템플릿을 로드하기 위해 Twig 로더 객체가 필요하다.
다음으로 Twig 환경 객체의 render() 메서드는 템플릿을 로드하고 HTML을 생성한다. render() 메서드가 반환하는 HTML은 PHP의 echo 명령을 사용하여 페이지에 작성된다.
render() 메서드는 두 개의 매개변수를 갖는다.
페이지를 표시하는 데 사용되는 템플릿
템플릿에 삽입될 데이터
echo $twig->render('member.html', $data);
내부적으로 Twig는 템플릿 파일을 로드하고 Twig 명령을 PHP 코드로 변환한다.
그런 다음 PHP 인터프리터는 방문자에게 전송되는 HTML 결과를 생성하기 위해 해당 PHP 코드를 실행한다.
다른 많은 라이브러리와 마찬가지로 Twig에도 동작 방법을 제어하는 옵션이 있다. 옵션은 배열로 저장되어 Twig 환경 객체가 생성될 때 인수로 제공된다(PDO 객체처럼).
다음의 $twig_options라는 변수는 배열을 저장한다. 이것은 Twig 환경 객체가 동작하는 방식을 제어하는 옵션인 두 개의 키를 갖는다. 각 키에 대한 값은 해당 옵션에 대한 설정이다. $twig_options 배열은 Twig 환경 객체를 생성할 때 두 번째 인수로 사용된다.
$twig_options['cache'] = APP_ROOT . '/templates/cache'; $twig_options['debug'] = DEV; $loader = new Twig\Loader\FilesystemLoader(APP_ROOT . '/templates'); $twig = new Twig\Environment($loader, $twig_options);
내부적으로 Twig는 Twig 명령을 PHP 인터프리터가 실행할 수 있는 PHP 코드로 변환한다. 이 PHP 코드는 캐시될 수 있다(페이지가 요청할 때마다 다시 생성되지 않고 서버에 저장된 파일에 저장됨). 이것은 템플릿을 더 빨리 로드할 수 있게 하여 서버 리소스를 절약한다.
캐시를 설정하기 위해 cache 옵션에는 파일이 저장되야 하는 위치에 대한 절대 경로가 필요하다. 앞에서 이 경로는 첫 번째 옵션에 주어졌다. Twig는 디폴트로 캐싱을 설정하지 않는다.
사이트가 개발 중일 때 debug 옵션은 템플릿이 페이지에 디버그 데이터를 표시하도록 한다. config.php에 설정된 DEV 상수는 debug 옵션에 대한 값을 설정하는 데 사용된다.
Twig 템플릿이 PHP 페이지에서 정의되지 않은 변수를 사용한다면, Twig는 해당 변수를 생성하고 null 값을 준다. Twig 환경 객체는 템플릿이 생성되지 않은 변수를 사용하려고 할 때 예외를 발생하도록 지시할 수 있다. 이렇게 하려면, $twig_options 배열에 true 값으로 strict_variables라는 키를 추가한다.
Twig 템플릿에 PHP 코드가 있다면 해당 코드는 실행되지 않을 것이다. 하지만 Twig에는 기능을 확장하는 익스텐션과 모든 템플릿에서 사용할 수 있는 전역 변수가 있다.
대부분의 템플릿이 값에 접근해야 할 경우에 전역 변수를 사용할 수 있다. 예를 들어, DOC_ROOT 상수는 config.php에서 생성되므로, PHP 페이지는 브라우저가 요청하는 이미지, 스타일 시트, 스크립트, 그리고 기타 파일에 대한 올바른 경로를 생성할 수 있다.
Twig 템플릿은 PHP 상수에 접근할 수 없지만, 이러한 값은 모든 Twig 템플릿에서 값을 사용할 수 있도록 Twig 전역 변수global variable에 저장될 수 있다. 전역 변수를 생성하기 위해, Twig 환경 객체의 addGlobal() 메서드를 두 개의 인수(변수의 이름과 그 변수가 가져야 하는 값)로 호출한다.
$twig->addGlobal('doc_root', DOC_ROOT);
Twig 템플릿은 PHP를 사용할 수 없기 때문에, var_dump() 함수를 사용하여 변수에 저장된 값이나 데이터 타입을 확인할 수 없다. Twig에는 Twig 템플릿이 dump()라는 메서드를 사용하여 이 작업을 수행할 수 있게 하는 debug라는 익스텐션이 있다.
debug 익스텐션은 객체로 구현된다. 다음에서 DEV 상수의 값이 true면, Twig 환경 객체의 addExtension() 메서드가 호출되어 익스텐션을 추가하며 해당 인수는 새로운 DebugExtension 객체다.
if (DEV){ $twig->addExtension(new \Twig\Extension\DebugExtension()); }
PHP의 var_dump() 함수와 같이, Twig의 dump() 함수의 인수 하나는 확인하고자 하는 상수를 가진 변수의 이름이다. dump() 함수는 debug 옵션이 커져 있을 때만 변수의 내용을 표시한다.
출처 - 존 두켓, <백엔드 프로그래밍을 위한 PHP & MySQL>, Jpub, 2022