뷰Views
간단히 말하면 뷰 는 웹페이지이거나 헤더 푸터같은 웹페이지 조각입니다. 사실,뷰는 유연하게 다른 뷰에 삽입될수 있습니다.
뷰는 절대로 직접 호출되지않고 ,컨트롤러를 통해서 호출됩니다. MVC 패턴에서 컨트롤러는 교통경찰같은 역할을 하며 어떤 뷰가 보여져야할지를 결정하는 책임 있다는것을 명심하세요 .만약 컨트롤러 페이지를 아직 읽지않으셨으면 반드시 먼저 읽어주세요 .
컨트롤러 페이지에서 작성한 컨트롤러에 뷰를 추가해봅시다.
뷰 만들기
blogview.php 라는 파일을 만든후 아래의 코드를 입력하세요.:
그리고 application/views/ 폴더안에 저장하세요.
뷰 로딩하기
특정 뷰 파일을 로드하기위해서 아래와 같은 코드를 사용합니다:
$this->load->view('name');
name 은 뷰 파일의 이름을 넣어주시면 됩니다. Note: .php 확장자는 넣지 마세요.
이전에 만들었던 blog.php 컨트롤러를 여신후 echo 문장대신 View를 로드하도록 합니다:
아래처럼 url 로 접속해 보면 echo 문으로 찍은 글 대신 새로 작성한 뷰를 보실수 있습니다:
example.com/index.php/blog/
여러개의 뷰를 로드하기
CodeIgniter 는 컨트롤러에서 뷰를 로드($this->load->view)할때 지능적으로 동작합니다 from within a controller. 만약 2개이상을 로드하면 하나씩 덧붙여서(append) 출력합니다.예를들어 header view, a menu view, a content view, and a footer view 를 출력하고싶다면 아래와 같이 로드하시면 됩니다:
<?php
class Page extends CI_Controller {
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('folder_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);
Note: 객체를 사용할때는 클래스의 변수가 배열의 요소로 변환됩니다.
위에서만든 컨트롤러를 이용하여 한번 해봅시다:
뷰 파일을 열어서 텍스트를 넘겨준 배열의 key이름과 같은 변수로 바꾸어봅시다.:
그리고 URL로 접속해보면 변수값으로 바뀌어있는것을 확인할 수 있습니다.
루프작성
뷰에 넘겨주는 데이터는 단순한 변수로 제한되어있지 않습니다. 배열안의 값으로 다른 배열을 넣어서 전달할수 있으며, 넘겨받은 배열을가지고 루프를 이용하여 여러줄의 데이터를 표시할수 있습니다. 예를 들어 데이터베이스에서 데이터를 가져온다면 일반적으로 그 값을 다차원배열에 넣어 뷰로 전달하게 됩니다.
다음 예제를 여러분의 컨트롤러에 추가하세요:
그다음 뷰파일을 열어 루프를 작성합니다:
Note: 위 예에서 우리가 PHP 대체문법을 이용하고 있다는걸 알수 있을것입니다. 이에대해 더 자세한 정보는여기 를 참조해주세요 .
뷰를 데이터처럼 리턴받기(Returning views as data)
세번째 파라미터(옵션) 를 사용하면 뷰를 브라우저로 전송하는대신 데이터로써 리턴하게됩니다. 뷰를 데이터로 처리해야할경우 유용하겠죠 . 아래와같이 3번째 파라미터를 true (boolean)로 설정하면 됩니다.기본값은 false 이며 이때 는 데이터를 브라우저로 전송하게 됩니다. 데이터로 리턴받을때는 변수에 할당해야한다는걸 잊지마세요 .:
$string = $this->load->view('myfile', '', true);