뷰 Views

간단히 말하면 뷰 는 웹페이지이거나 헤더 푸터같은 웹페이지 조각입니다. 사실,뷰는 유연하게 다른 뷰에 삽입될 수 있습니다.

뷰는 절대로 직접 호출되지 않고, 컨트롤러(controller)를 통해서 호출됩니다. MVC 패턴에서 컨트롤러는 교통경찰같은 역할을 하며 어떤 뷰가 보여져야할지를 결정하는 책임 있다는 것을 명심하세요 . 만약 컨트롤러(Controllers) 페이지를 아직 읽지않으셨으면 반드시 먼저 읽어주세요.

컨트롤러(controller) 페이지에서 작성한 컨트롤러에 뷰를 추가해봅시다.

뷰 생성하기 Creating a View

텍스트 에디터를 통해 blogview.php 라는 파일을 생성해봅시다. 그리고 그 안에 아래에 코드를 입력하세요:

<html>
<head>
        <title>My Blog</title>
</head>
<body>
        <h1>Welcome to my Blog!</h1>
</body>
</html>

그리고 application/views/ 디렉토리 안에 저장하세요.

뷰 로딩하기 Loading a View

특정 뷰 파일을 로드하기 위해서 아래와 같은 코드를 사용합니다:

$this->load->view('name');

name 은 뷰 파일의 이름을 넣어주시면 됩니다.

Note

.php 이외의 확장자를 사용하는 경우라면, .php 확장자는 넣을 필요가 없습니다.

이전에 만들었던 Blog.php 컨트롤러를 여신후 echo 문장대신 View를 로드하도록 합니다:

<?php
class Blog extends CI_Controller {

        public function index()
        {
                $this->load->view('blogview');
        }
}

아래처럼 url 로 접속해 보면 echo 문으로 찍은 글 대신 새로 작성한 뷰를 보실 수 있습니다:

example.com/index.php/blog/

여러 개의 뷰 로딩하기 Loading multiple views

CodeIgniter 는 컨트롤러에서 뷰를 로드($this->load->view())할 때 지능적으로 동작합니다 from within a controller. 만약 두 개 이상을 로드하면 하나씩 덧붙여서(append) 출력합니다. 예를 들어 header view, a menu view, a content view, and a footer view 를 출력하고 싶다면 아래와 같이 로드하시면 됩니다:

<?php

class Page extends CI_Controller {

        public function index()
        {
                $data['page_title'] = 'Your title';
                $this->load->view('header');
                $this->load->view('menu');
                $this->load->view('content', $data);
                $this->load->view('footer');
        }

}

위 예제 같은 경우 우리는 아래에 소개하는 “동적 데이터 추가” 라는 방법을 쓸 것입니다.

뷰를 서브 디렉토리 안에 저장하기 Storing Views within Sub-directories

뷰는 서브폴더에 저장될 수 있습니다. 이럴경우 뷰를 로드할 때 디렉토리 이름을 같이 적어주시면 됩니다. 예제:

$this->load->view('directory_name/file_name');

뷰에 동적 데이터를 추가하기 Adding Dynamic Data to the View

뷰를 로드할 때 배열이나 객체를 두 번째 파라미터로 전달할 수 있습니다:

배열을 사용하는 예제 :

$data = array(
        'title' => 'My Title',
        'heading' => 'My Heading',
        'message' => 'My Message'
);

$this->load->view('blogview', $data);

객체를 사용하는 예제:

$data = new Someclass();
$this->load->view('blogview', $data);

Note

객체를 사용할 때는 클래스의 변수가 배열의 요소로 변환됩니다.

위에서 만든 컨트롤러를 이용하여 한 번 해봅시다:

<?php
class Blog extends CI_Controller {

        public function index()
        {
                $data['title'] = "My Real Title";
                $data['heading'] = "My Real Heading";

                $this->load->view('blogview', $data);
        }
}

뷰 파일을 열어서 텍스트를 넘겨준 배열의 key 이름과 같은 변수로 바꾸어 봅시다:

<html>
<head>
        <title><?php echo $title;?></title>
</head>
<body>
        <h1><?php echo $heading;?></h1>
</body>
</html>

그리고 URL로 접속해보면 변수 값으로 바뀌어 있는 것을 확인할 수 있습니다.

루프 작성 Creating Loops

뷰에 넘겨주는 데이터는 단순한 변수로 제한 되어 있지 않습니다. 배열 안의 값으로 다른 배열을 넣어서 전달할 수 있으며, 넘겨받은 배열을 가지고 루프를 이용하여 여러 줄의 데이터를 표시할 수 있습니다. 예를 들어 데이터베이스에서 데이터를 가져온다면 일반적으로 그 값을 다차원 배열에 넣어 뷰로 전달하게 됩니다.

다음 예제를 여러분의 컨트롤러에 추가하세요:

<?php
class Blog extends CI_Controller {

        public function index()
        {
                $data['todo_list'] = array('Clean House', 'Call Mom', 'Run Errands');

                $data['title'] = "My Real Title";
                $data['heading'] = "My Real Heading";

                $this->load->view('blogview', $data);
        }
}

그 다음 뷰파일을 열어 루프를 작성합니다:

<html>
<head>
        <title><?php echo $title;?></title>
</head>
<body>
        <h1><?php echo $heading;?></h1>

        <h3>My Todo List</h3>

        <ul>
        <?php foreach ($todo_list as $item):?>

                <li><?php echo $item;?></li>

        <?php endforeach;?>
        </ul>

</body>
</html>

Note

위 예에서 우리가 PHP 대체 문법을 이용하고 있다는 걸 알 수 있을 것입니다. 이에 대해 더 자세한 정보는 여기 를 참조해주세요.

뷰를 데이터처럼 반환하기 Returning views as data

세 번째 파라미터(옵션) 를 사용하면 뷰를 브라우저로 전송하는대신 데이터로써 리턴하게 됩니다. 뷰를 데이터로 처리해야할 경우 유용하겠죠 . 아래와 같이 3번째 파라미터를 true (boolean)로 설정하면 됩니다.기본값은 false 이며 이때 는 데이터를 브라우저로 전송하게 됩니다. 데이터로 리턴받을 때는 변수에 할당해야한다는걸 잊지마세요:

$string = $this->load->view('myfile', '', TRUE);