정적 페이지

참고: 이 튜토리얼은 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>&copy; 2015</em>
        </body>
</html>

컨트롤러에 로직 추가

앞서 view() 메소드가 있는 컨트롤러를 설정했습니다. 이 메소드는 로드할 페이지 이름을 매개변수로 받습니다. 정적 페이지 템플릿은 application/views/pages/ 디렉터리에 있습니다.

해당 디렉터리에 home.phpabout.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() 메소드로 올바르게 라우팅되었나요? 훌륭합니다!