라이브러리와 Composer(4)

minah moon·2023년 9월 15일

PHP

목록 보기
54/58
post-thumbnail

PHP 페이지 업데이트하기

방문자가 요청하는 PHP 페이지는 데이터베이스에서 데이터를 가져온다. 데이터는 Twig 템플릿을 채우는 데 사용되는 배열에 저장된다. 그런 다음, render() 메서드를 사용하여 방문자에게 표시되는 HTML을 생성한다.


TWIG 템플릿의 데이터 접근하기

템플릿은 $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 템플릿에 데이터 표시하기

Twig 템플릿 파일은 HTML 태그와 Twig 명령으로 구성된다. 이중 중괄호 {{ }}는 내용을 출력하라고 Twig에 지시한다.

변수에 저장된 값을 표시하려면, 변수 이름을 이중 중괄호 안에 작성한다. 만약에 변수에 HTML의 예약 문자가 포함되어 있다면, Twig는 자동으로 이 문자를 이스케이핑한다.

<h1>{{ category.name }}</h1>
<p>{{ category.description }}</p>

Twig에는 변수에 저장된 데이터를 가지고 작업할 수 있는 필터들이 있다.

raw 필터

데이터가 이스케이핑되지 않도록 하려면, raw 필터를 사용한다. 이 필터는 안전하지 않은 마크업을 제거하기 위해 HTML Purifier를 사용하여 HTML을 안전하게 포함하는 기사 내용에 사용된다. 필터를 사용하기 위해 변수 이름 다음에 파이프스템 문자 |를 추가하고 필터의 이름을 쓴다.

<p>{{ article.content|raw }}</p>

date 필터

만약에 필터가 작업을 수행하기 위해 데이터가 필요하다면, 함수처럼 필터 이름 다음에 괄호 안에 주어진다. 예를 들어, date 필터는 날짜 형식을 지정할 수 있다.

  • PHP의 내장 함수인 strtotime()와 동일한 날짜 형식을 사용한다.

  • PHP의 내장 함수인 date()와 동일한 값을 사용하여 날짜 형식을 지정한다.

e 필터

e 필터는 내용을 이스케이핑하므로 페이지에 안전하게 표시할 수 있다. 해당 매개변수는 데이터가 사용될 위치를 필터에게 알려준다. HTML, CSS, JavaScript 그리고 URL은 모두 서로 다른 예약 문자가 있으므로 데이터가 사용되는 곳마다 다른 문자를 이스케이핑해야 한다는 것이 중요하다.

<p>{{ article.summary|e('html_attr') }}</p>

값 : 대상

  • html : HTML body 내용
  • html_attr : HTML 속성의 값
  • css : CSS
  • js : 자바스크립트
  • url : URL의 일부가 되는 텍스트

Twig 템플릿에 조건 사용하기

중괄호와 퍼센트 기호는 조건이나 루프와 같은 동작을 수행해야 할 때를 Twig에게 알려주는 여는 태그 {%와 닫는 태그 %}를 만드는 데 사용된다.

  • if문
{% if published == true %}        // {% if published %}와 동일
	<h1>{{ category.name }}</h1>
{% endif %}
  • and와 or를 사용하여 여러 조건 결합 가능
{% if time > 6 and time < 12 %}
	<p>Good morning.</p>
{% endif %}
  • Twig는 else와 elseif 구조 및 삼항 연산자와 널 병합 연산자도 지원한다.
{% if time > 6 and time < 12 %}
	<p>Good morning.</p>
{% elseif time >= 12 %}
	<p>Good afternoon.</p>
{% else %}
	<p>Welcome.</p>
{% endif %}

Twig 템플릿에서 루프 사용하기

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

0개의 댓글