정적 페이지¶
참고: 이 튜토리얼은 CodeIgniter를 다운로드하고 개발 환경에 프레임워크를 설치 했다고 가정합니다.
가장 먼저 할 일은 정적 페이지를 처리할 컨트롤러를 설정하는 것입니다. 컨트롤러는 단순히 작업을 위임하는 데 도움이 되는 클래스입니다. 컨트롤러는 웹 애플리케이션의 접착제입니다.
예를 들어, 다음과 같은 호출이 이루어질 때:
“news”라는 이름의 컨트롤러가 있다고 상상할 수 있습니다. news에서 호출되는 메소드는 “latest”일 것입니다. news 메소드의 역할은 10개의 뉴스 항목을 가져와 페이지에 렌더링하는 것일 수 있습니다. MVC에서는 종종 다음과 일치하는 URL 패턴을 볼 수 있습니다:
URL 체계가 더 복잡해질수록 이는 변경될 수 있습니다. 하지만 지금은 이것만 알면 됩니다.
다음 코드로 application/controllers/Pages.php 파일을 만드세요.
<?php
class Pages extends CI_Controller {
public function view($page = 'home')
{
}
}
Pages 라는 이름의 클래스를 만들었으며, $page 라는 하나의 인수를 받는 view 메소드가
있습니다. Pages 클래스는 CI_Controller 클래스를 확장합니다. 이는 새 pages 클래스가
CI_Controller 클래스(system/core/Controller.php)에 정의된 메소드와 변수에 접근할
수 있음을 의미합니다.
컨트롤러는 웹 애플리케이션에 대한 모든 요청의 중심이 됩니다. 매우 기술적인 CodeIgniter
논의에서는 슈퍼 오브젝트라고 부를 수 있습니다. 모든 PHP 클래스처럼 컨트롤러 내에서
$this 로 참조합니다. $this 를 참조하는 방법으로 라이브러리를 로드하고, 뷰를 로드하고,
일반적으로 프레임워크를 제어합니다.
이제 첫 번째 메소드를 만들었으니 기본 페이지 템플릿을 만들 차례입니다. 페이지 바닥글과 헤더 역할을 하는 두 개의 “뷰”(페이지 템플릿)를 만들 것입니다.
application/views/templates/header.php 에 헤더를 만들고 다음 코드를 추가하세요:
<html lang="en">
<head>
<title>CodeIgniter Tutorial</title>
</head>
<body>
<h1><?php echo $title; ?></h1>
헤더에는 기본 HTML 코드와 함께 메인 뷰를 로드하기 전에 표시하고 싶은 제목이 포함되어 있습니다.
나중에 컨트롤러에서 정의할 $title 변수도 출력합니다.
이제 application/views/templates/footer.php 에 다음 코드가 포함된 바닥글을 만드세요:
<em>© 2015</em>
</body>
</html>
컨트롤러에 로직 추가¶
앞서 view() 메소드가 있는 컨트롤러를 설정했습니다. 이 메소드는 로드할 페이지 이름을
매개변수로 받습니다. 정적 페이지 템플릿은 application/views/pages/ 디렉터리에 있습니다.
해당 디렉터리에 home.php 와 about.php 라는 두 파일을 만드세요. 파일 안에 원하는 텍스트를 입력하고 저장하세요. 원본이 없다면 “Hello World!”를 시도해보세요.
해당 페이지를 로드하려면 요청한 페이지가 실제로 존재하는지 확인해야 합니다:
public function view($page = 'home')
{
if ( ! file_exists(APPPATH.'views/pages/'.$page.'.php'))
{
// Whoops, we don't have a page for that!
show_404();
}
$data['title'] = ucfirst($page); // Capitalize the first letter
$this->load->view('templates/header', $data);
$this->load->view('pages/'.$page, $data);
$this->load->view('templates/footer', $data);
}
이제 페이지가 존재하면 헤더와 바닥글을 포함하여 로드되고 사용자에게 표시됩니다. 페이지가 존재하지 않으면 “404 Page not found” 오류가 표시됩니다.
이 메소드의 첫 번째 줄은 페이지가 실제로 존재하는지 확인합니다.
PHP의 기본 file_exists() 함수를 사용하여 파일이 예상 위치에 있는지 확인합니다.
show_404() 는 기본 오류 페이지를 렌더링하는 CodeIgniter 내장 함수입니다.
헤더 템플릿에서 $title 변수를 사용하여 페이지 제목을 사용자 정의했습니다.
title 값은 이 메소드에서 정의되지만, 변수에 직접 할당하는 대신 $data 배열의
title 요소에 할당됩니다.
마지막으로 해야 할 일은 뷰를 표시 순서에 맞게 로드하는 것입니다. view() 메소드의
두 번째 매개변수는 뷰에 값을 전달하는 데 사용됩니다. $data 배열의 각 값은 키 이름의
변수에 할당됩니다. 따라서 컨트롤러의 $data['title'] 값은 뷰에서 $title 에 해당합니다.
라우팅¶
컨트롤러가 이제 작동합니다! [your-site-url]index.php/pages/view 로 브라우저를
열어 페이지를 확인하세요. index.php/pages/view/about 를 방문하면 헤더와 바닥글을
포함한 about 페이지를 볼 수 있습니다.
사용자 정의 라우팅 규칙을 사용하면 URI를 임의의 컨트롤러와 메소드에 매핑하고 일반 규칙:
http://example.com/[controller-class]/[controller-method]/[arguments] 에서
벗어날 수 있습니다.
그렇게 해봅시다. application/config/routes.php 에 있는 라우팅 파일을 열고
다음 두 줄을 추가하세요. $route 배열의 요소를 설정하는 다른 모든 코드를 제거하세요.
$route['default_controller'] = 'pages/view';
$route['(:any)'] = 'pages/view/$1';
CodeIgniter는 위에서 아래로 라우팅 규칙을 읽고 요청을 첫 번째로 일치하는 규칙으로 라우팅합니다. 각 규칙은 슬래시로 구분된 컨트롤러와 메소드 이름에 매핑된 정규 표현식(왼쪽)입니다. 요청이 들어오면 CodeIgniter는 첫 번째 일치를 찾고 적절한 컨트롤러와 메소드를 호출합니다. 인수를 포함할 수도 있습니다.
라우팅에 대한 자세한 내용은 URI 라우팅 문서 를 참조하세요.
여기서 $route 배열의 두 번째 규칙은 와일드카드 문자열 (:any) 를 사용하여
모든 요청에 일치하고 매개변수를 Pages 클래스의 view() 메소드에 전달합니다.
이제 index.php/about 를 방문하세요. pages 컨트롤러의 view() 메소드로 올바르게
라우팅되었나요? 훌륭합니다!