
방문자가 요청하는 PHP 페이지는 데이터베이스에서 데이터를 가져온다. 데이터는 Twig 템플릿을 채우는 데 사용되는 배열에 저장된다. 그런 다음, render() 메서드를 사용하여 방문자에게 표시되는 HTML을 생성한다.
템플릿은 $data 배열의 각 요소를 템플릿이 사용할 수 있는 별도의 변수로 처리한다. Twig 변수는 $로 시작하지 않는다.
만약에 PHP 페이지가 세 개의 요소를 포함하는 다음의 연관 배열을 생성했다면
$data['name'] = 'Ivy Stone'; $data['joined] = '2021-01-26 12:04:23'; $data['picture'] = 'ivy.jpg';
Twig 템플릿은 $data 배열의 각 요소를 배열의 키가 변수 이름이 되는 별도의 변수처럼 취급할 것이다.
name
joined
picture
요소 중 하나의 값이 스칼라값이 아닌 다른 배열이라면
$data['category']['name'] = 'Illustration'; $data['category']['description'] = 'Hand-drawn visual storytelling'; $data['category']['published'] = true;
Twig 템플릿은 이것을 값으로 배열을 가진 category라는 하나의 변수로 취급한다. 이 배열의 요소에 대한 값을 얻기 위해 변수의 이름(category), 점, 키의 이름(name, description 또는 published)을 사용한다.
category.name
category.description
category.published
만약에 $data 배열의 요소로 객체가 있다면, 동일한 점 구문을 사용하여 해당 객체의 속성에 저장된 값에 접근할 수 있다.
Twig 템플릿 파일은 HTML 태그와 Twig 명령으로 구성된다. 이중 중괄호 {{ }}는 내용을 출력하라고 Twig에 지시한다.
변수에 저장된 값을 표시하려면, 변수 이름을 이중 중괄호 안에 작성한다. 만약에 변수에 HTML의 예약 문자가 포함되어 있다면, Twig는 자동으로 이 문자를 이스케이핑한다.
<h1>{{ category.name }}</h1> <p>{{ category.description }}</p>
Twig에는 변수에 저장된 데이터를 가지고 작업할 수 있는 필터들이 있다.
데이터가 이스케이핑되지 않도록 하려면, raw 필터를 사용한다. 이 필터는 안전하지 않은 마크업을 제거하기 위해 HTML Purifier를 사용하여 HTML을 안전하게 포함하는 기사 내용에 사용된다. 필터를 사용하기 위해 변수 이름 다음에 파이프스템 문자 |를 추가하고 필터의 이름을 쓴다.
<p>{{ article.content|raw }}</p>
만약에 필터가 작업을 수행하기 위해 데이터가 필요하다면, 함수처럼 필터 이름 다음에 괄호 안에 주어진다. 예를 들어, date 필터는 날짜 형식을 지정할 수 있다.
PHP의 내장 함수인 strtotime()와 동일한 날짜 형식을 사용한다.
PHP의 내장 함수인 date()와 동일한 값을 사용하여 날짜 형식을 지정한다.
e 필터는 내용을 이스케이핑하므로 페이지에 안전하게 표시할 수 있다. 해당 매개변수는 데이터가 사용될 위치를 필터에게 알려준다. HTML, CSS, JavaScript 그리고 URL은 모두 서로 다른 예약 문자가 있으므로 데이터가 사용되는 곳마다 다른 문자를 이스케이핑해야 한다는 것이 중요하다.
<p>{{ article.summary|e('html_attr') }}</p>
값 : 대상
- html : HTML body 내용
- html_attr : HTML 속성의 값
- css : CSS
- js : 자바스크립트
- url : URL의 일부가 되는 텍스트
중괄호와 퍼센트 기호는 조건이나 루프와 같은 동작을 수행해야 할 때를 Twig에게 알려주는 여는 태그 {%와 닫는 태그 %}를 만드는 데 사용된다.
{% if published == true %} // {% if published %}와 동일 <h1>{{ category.name }}</h1> {% endif %}
{% if time > 6 and time < 12 %} <p>Good morning.</p> {% endif %}
{% if time > 6 and time < 12 %} <p>Good morning.</p> {% elseif time >= 12 %} <p>Good afternoon.</p> {% else %} <p>Welcome.</p> {% endif %}
Twig에는 PHP의 foreach 루프와 같이 배열의 각 요소나 객체의 각 속성을 통해 동작할 수 있는 for 루프가 있다.
Twig의 for 루프는 PHP의 foreach 루프와 같으며 배열의 요소를 가지고 동작하는 데 사용된다. 루프에 포함된 구문은 루프가 실행될 때마다 반복된다. 이 루프는 {% endfor %}
태그로 닫힌다.
여는 태그는 for 키워드로 시작하여 루프에서 현재 항목을 보유하는 변수가 오고, 키워드 in과 루프를 돌아야 하는 배열이나 객체를 보유하는 변수가 온다.
{% for article in articles %} <h2>{{ article.title }}</h2> <p>{{ article.summary }}</p> {% endfor %}
고정된 횟수만큼 항목을 반복하려면, 약간 다른 구문이 사용된다. 여는 태그는 for 키워드로 시작하여
Twig 변수는 카운터 역할을 한다. 여기서는 i라고 한다(이 변수는 루프에서 사용할 수 있다).
다음으로 in 키워드
그리고 1.. 그리고 실행되어야 하는 횟수를 가진 변수
만약에 count라는 변숫값이 5면, 루프는 5번 실행된다. 루프가 처음 실행되면 카운터 변수 i는 1의 값을 갖는다. 다음 번 루프에는 2의 값을 갖는다. 이것은 숫자 5에 도달할 때까지 계속된다.
{% for i in 1..count %} <a href="?page={{ i }}">{{ i }}</a> {% endfor %}
출처 - 존 두켓, <백엔드 프로그래밍을 위한 PHP & MySQL>, Jpub, 2022