뷰¶
뷰는 단순히 웹 페이지 또는 헤더, 바닥글, 사이드바 등의 페이지 조각입니다. 실제로 이러한 계층 구조가 필요한 경우 뷰는 다른 뷰 안에 유연하게 포함될 수 있습니다(다른 뷰 안에, 계속해서).
뷰는 직접 호출되지 않으며 컨트롤러 에 의해 로드되어야 합니다. MVC 프레임워크에서 컨트롤러는 교통 경찰 역할을 하므로 특정 뷰를 가져오는 역할을 합니다. 컨트롤러 페이지를 아직 읽지 않았다면 계속하기 전에 읽어보세요.
컨트롤러 페이지에서 만든 예시 컨트롤러를 사용하여 뷰를 추가해 봅시다.
뷰 생성¶
텍스트 편집기를 사용하여 blogview.php라는 파일을 만들고 다음 내용을 넣으세요:
<html lang="en">
<head>
<title>My Blog</title>
</head>
<body>
<h1>Welcome to my Blog!</h1>
</body>
</html>
그런 다음 application/views/ 디렉터리에 파일을 저장하세요.
뷰 로드¶
특정 뷰 파일을 로드하려면 다음 메소드를 사용합니다:
$this->load->view('name');
여기서 name은 뷰 파일의 이름입니다.
참고
.php 파일 확장자는 .php 이외의 것을 사용하지 않는 한 지정할 필요가 없습니다.
이제 앞서 만든 Blog.php 컨트롤러 파일을 열고 echo 문을 뷰 로딩 메소드로 교체하세요:
<?php
class Blog extends CI_Controller {
public function index()
{
$this->load->view('blogview');
}
}
이전에 사용한 URL로 사이트를 방문하면 새 뷰를 볼 수 있습니다. URL은 다음과 유사했습니다:
example.com/index.php/blog/
여러 뷰 로드¶
CodeIgniter는 컨트롤러 내에서 $this->load->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');
}
}
위의 예시에서 “동적으로 추가된 데이터”를 사용하고 있는데, 아래에서 볼 수 있습니다.
서브 디렉터리에 뷰 저장¶
이러한 조직 유형을 선호한다면 뷰 파일을 서브 디렉터리 내에 저장할 수 있습니다. 그렇게 할 때는 뷰를 로드할 때 디렉터리 이름을 포함해야 합니다. 예시:
$this->load->view('directory_name/file_name');
뷰에 동적 데이터 추가¶
뷰 로딩 메소드의 두 번째 매개변수에 배열 또는 오브젝트를 통해 컨트롤러에서 뷰로 데이터가 전달됩니다. 배열을 사용한 예시입니다:
$data = array(
'title' => 'My Title',
'heading' => 'My Heading',
'message' => 'My Message'
);
$this->load->view('blogview', $data);
오브젝트를 사용한 예시입니다:
$data = new Someclass();
$this->load->view('blogview', $data);
참고
오브젝트를 사용하면 클래스 변수가 배열 요소로 변환됩니다.
컨트롤러 파일로 시도해 봅시다. 파일을 열고 다음 코드를 추가하세요:
<?php
class Blog extends CI_Controller {
public function index()
{
$data['title'] = "My Real Title";
$data['heading'] = "My Real Heading";
$this->load->view('blogview', $data);
}
}
이제 뷰 파일을 열고 데이터의 배열 키에 해당하는 변수로 텍스트를 변경하세요:
<html lang="en">
<head>
<title><?php echo $title;?></title>
</head>
<body>
<h1><?php echo $heading;?></h1>
</body>
</html>
그런 다음 사용해온 URL로 페이지를 로드하면 변수가 치환된 것을 볼 수 있습니다.
루프 생성¶
뷰 파일에 전달하는 데이터 배열은 간단한 변수에 제한되지 않습니다. 다차원 배열을 전달할 수 있으며, 여러 행을 생성하기 위해 루프를 돌릴 수 있습니다. 예를 들어 데이터베이스에서 데이터를 가져오면 일반적으로 다차원 배열 형식입니다.
간단한 예시입니다. 컨트롤러에 다음을 추가하세요:
<?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 lang="en">
<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>
참고
위의 예시에서 PHP의 대안적 구문을 사용하고 있습니다. 익숙하지 않다면 여기 에서 읽어볼 수 있습니다.
데이터로 뷰 반환¶
세 번째 선택적 매개변수를 사용하면 브라우저에 전송하는 대신 데이터를 문자열로 반환하도록 메소드 동작을 변경할 수 있습니다. 이는 어떤 방식으로든 데이터를 처리하려는 경우에 유용할 수 있습니다. 매개변수를 TRUE(불리언)로 설정하면 데이터를 반환합니다. 기본 동작은 false로, 브라우저에 전송됩니다. 데이터를 반환받으려면 변수에 할당해야 합니다:
$string = $this->load->view('myfile', '', TRUE);