라이브러리와 Composer(5)

minah moon·2023년 9월 21일

PHP

목록 보기
55/58
post-thumbnail

템플릿 파일을 구조화하는 방법

웹사이트의 모든 페이지에 표시되는 코드를 포함하기 위해 하나의 부모 템플릿이 사용되어야 한다. 해당 부모 템플릿은 자식 템플릿이 덮어쓸 수 있는 블록을 사용한다.

사이트가 Twig를 사용한다면, 모든 페이지에서 사용되는 코드(예를 들어, 헤더와 푸터 파일에 있는 코드)를 포함하는 부모 템플릿이 있어야 한다.

템플릿은 블록을 정의할 수 있다. 부모 템플릿에서 블록은 다른 페이지가 덮어쓸 수 있는 레이아웃의 섹션을 나타낸다.

블록은 블록에 주어진 이름인 태그로 시작한다.

{% block block-name %}

블록은 닫는 태그로 끝난다.

{% endblock %}

자식 템플릿은 사이트의 개별 페이지를 나타낼 수 있다. 자식 템플릿은 부모 템플릿으로부터 코드를 상속하고 부모가 포함하는 명명된 블록의 내용을 덮어쓸 데이터를 제공한다.

사이트 방문자가 요청할 수 있는 각 유형의 페이지(홈, 카테고리, 기사, 회원, 검색)에는 부모 템플릿을 확장하는 자체의 자식 템플릿이 있다. extends 태그는 확장할 부모 템플릿의 이름을 지정한다.

{% extends 'parent-template.html' %}

자식 템플릿에서 block 태그 사이의 모든 항목은 부모 템플릿의 해당 블록에 있는 내용을 덮어쓴다.

부모, 자식, 그리고 인클루드 파일은 모두 $data 배열에 의해 생성된 변수에 접근할 수 있다.


PHPMailer를 사용하여 이메일 보내기

사이트는 종종 거래형 이메일transactional email이라는 개별 이메일을 전송한다. 예를 들어, 비밀번호 재설정 페이지는 사용자가 비밀번호를 재설정할 수 있는 링크를 이메일로 보내거나, 연락처 양식을 통해 사이트 소유자에게 메시지를 보낼 수 있다.

컴퓨터나 모바일 장치에서 이메일을 보낼 때, 받는 사람의 이메일 주소와 제목, 그리고 메시지 본문을 입력하면 이메일 프로그램은 받는 사람에게 이메일을 배달하는 SMTP 서버에 이메일을 보낸다.

이메일 프로그램이 새로운 이메일 주소를 사용하도록 설정할 때, SMTP 서버에 연결하는 방법을 알려줘야 한다.

SMTP 서버에 연결하기 위해 필요한 세부 정보

  • 도메인 이름이 웹 서버를 식별하듯 SMTP 서버를 식별하는 호스트명
  • 동일한 컴퓨터의 여러 프로그램이 동일한 인터넷 연결을 공유할 수 있도록 하는 포트 번호
  • 계정에 로그인하기 위한 사용자 이름 및 비밀번호
  • 사용자 이름과 비밀번호를 안전하게 보내는 방법을 지정하는 보안 설정

마찬가지로 사이트가 이메일을 보내야 할 때 두 단계를 수행해야 한다.

  1. 이메일을 보낼 수 있는 SMTP 서버에 연결하기

  2. 이메일을 생성하여 SMTP 서버에 전달하기

PHPMailer라는 패키지를 사용하면 이메일을 생성하고 전송하는 코드를 처음부터 작성하지 않아도 된다.


이메일 생성하고 전송하기

PHPMailer 클래스를 사용하여 객체를 생성하고 SMTP 서버에 연결하는 방법을 알려준다. 그런 다음 이메일을 생성하고 전송한다.

다른 객체를 생성하는 것처럼 PHPMailer 객체는 PHPMailer 클래스를 사용하여 생성된다. PHPMailer 객체가 생성될 때, 인수로 불리언값인 true가 사용된다. 이것은 이메일을 생성하거나 전송하는 데 문제가 발생하면 예외를 발생하도록 PHPMailer에 지시한다.

$phpmailer = new \PHPMailer\PHPMailer\PHPMailer(true);

PHPMailer 객체가 생성되면, 이 사이트가 이메일을 전송하는 방법을 알 수 있도록 객체를 구성하기 위해 2개의 메서드와 8개의 속성이 사용된다.

이것은 이메일 프로그램이 새로운 이메일 계정에 사용하는 설정과 같다. 이것은 사이트에서 거래형 이메일을 전송할 때마다 동일하게 유지된다.

속성 / 메서드 : 설명

  • isSMTP() : SMTP 서버를 사용하여 이메일을 전송하도록 지정하는 메서드
  • Host : SMTP 서버의 호스트 주소를 보유하는 속성
  • SMTPAuth : SMTP 인증을 활성화하는 속성. SMTP 서버에 로그인하기 위해 사용자 이름 및 암호가 필요하기 때문에 true를 설정한다.
  • Username : SMTP 계정의 사용자 이름을 보유하는 속성
  • Password : SMTP 계정의 비밀번호를 보유하는 속성
  • Post : SMTP 서버가 사용하는 포트 번호를 보유하는 속성
  • SMTPSecure : 사용할 암호화 종류를 보유하는 속성. 일반적으로 tls로 설정한다.
  • SMTPDebug : 디버그 정보를 표시할지 여부를 PHPMailer에 지시하는 속성
  • isHTML() : 이메일에 HTML이 포함될 수 있음을 PHPMailer에 지시하는 메서드
  • CharSet : 이메일에 사용된 문자 인코딩을 설정하는 속성. 올바르게 설정되지 않으면 수신자의 이메일 프로그램에 텍스트가 올바르게 표시되지 않을 수 있다.

PHPMailer 객체가 생성되고 설정이 구성되면, 이메일을 생성하고 전송할 수 있다. 이메일을 생성하고 SMTP 서버에 전달하는 과정에는 PHPMailer 객체의 세 가지 메서드 호출과 세 가지 속성을 설정하는 것이 포함된다.

다음의 표에서 앞에 있는 5개의 속성과 메서드는 이메일 프로그램에서 새로운 이메일을 작성하는 것과 같은 작업이다. 이 값은 사이트가 이메일을 보낼 때마다 변경될 수 있다. 마지막 메서드는 이메일을 전송하기 위해 전송 버튼을 누르는 것과 같은 것이다.

속성 / 메서드 : 설명

  • setFrom() : 이메일을 전송하는 주소를 설정하는 메서드
  • addAddress() : 이메일이 전송될 주소를 설정하는 메서드(이 메서드는 주소를 더 추가하기 위해 다시 호출될 수 있다)
  • Subject : 이메일의 제목 줄에 담을 속성
  • Body : HTML을 사용하는 이메일의 본문을 담는 속성
  • AltBody : 이메일의 플레인 텍스트를 보유하는 속성(HTML 마크업 없음)
  • send() : SMTP 서버에 연결하여 이메일을 전달하는 메서드

SMTP 서버에 연결하는 방법을 알려주는 PHPMailer 객체를 생성하고, 이메일을 생성하고 전송하는 데 최소 18줄의 코드가 필요하다.

보통 사이트는 거래형 이메일을 전송하는 데 필요한 여러 개의 페이지가 있기 때문에, 각 페이지에서 이 코드를 반복하여 작성하는 대신 Email이라는 새로운 사용자 정의 클래스에 저장하여 사용할 수 있다.

이메일을 전송해야 하는 모든 페이지는 다음의 두 구문을 사용하여 이메일을 보낼 수 있다.

  1. 첫 번째 줄은 사용자 정의 Email 클래스를 사용하여 객체를 생성하고 $email이라는 변수에 저장한다. 객체에 필요한 구성 데이터는 생성자 메서드에 전달된다.

  2. 두 번째 줄은 이메일을 생성하고 전송하기 위해 Email 객체의 sendEmail() 메서드를 호출한다.

$email = new Email($email_config);
$email->senEmail($from, $to, $subject, $message);

Email 클래스의 두 메서드

  • __construct($email_config) : PHPMailer 객체를 생성하고 PHPMailer 속성에 저장한다. PHPMailer가 SMTP 서버에 연결하는 방법을 설정한다. 이러한 구문은 PHP 페이지가 이메일을 보낼 때마다 동일하므로 __construct() 메서드에 들어간다.
  • sendEmail($from, $to, $subject, $message) : 이메일을 생성하고 SMTP 서버에 전달한다. 이 메서드는 이메일을 전송하기 위해 호출된다. 호출될 때마다 해당 인수는 다른 값을 가질 수 있다.





출처 - 존 두켓, <백엔드 프로그래밍을 위한 PHP & MySQL>, Jpub, 2022

0개의 댓글