원문: http://www.coolphptools.com/codeigniter-smarty



절대로 최신버전의 CodeIgniter에서는 따라하지 마세요.

동작 안합니다!!!!!



역주) 따라서 다 하고 나서야, 동작이 안된다는 것을 알았을 뿐이고! 2~3년 전 글이었을 뿐이고! 시간을 낭비했을 뿐이고!


CodeIgniter가 생소할 수도 있겠지만, CodeIgniter는 가벼운 Model-VIew-Controller(MVC) 프레임워크로, PHP를 기반으로 한다. CodeIgniter는 EllisLabs에서 만드는 오픈소스 프로젝트다. CodeIgniter는 템플릿 시스템을 내장하고 있지만, 내가 마지막으로 내장 템플릿 시스템을 보았을 떄, 별 기능이 없었다. 또한 내장 템플릿 시스템은 preg_match()와 문자열 치환을 기반으로 페이지를 필터링하는 방식이었다. 만약 트랙피 사이즈가 크지 않고 변수 치환을 많이 사용하지 않는 사이트라면, 이러한 방법도 효과적일 수는 있다. 하지만 트래픽 사이즈가 크게 증가하고, 페이지수가 많은 사이트라면, 이러한 방식은 웹 사이트의 응답시간에 큰 영향을 미친다.


스마티(Smarty)는 또 다른 오픈소스 프로젝트로 템플릿을 처리하며 마찬가지로 PHP로 작성되었다. 스마티는 오랫동안 사용되었고, CodeIgniter에 내장된 단순한 템플릿 엔진에 비해 막강한 기능을 가지고 있다. 스마티는 또한 템플릿을순수한 PHP 파일로 컴파일하기 때문에, 실행할 때 더 빠르다.


템플릿 생성은 개발자들 사이에서 논쟁거리가 되어 왔는데, PHP를 HTML 안에서 직접 사용하는 편이 더 쉽고, 새로운 템플릿 언어를 배워서 똑같은 일을 하는 일이 좀더 어렵다고 느꼈기 때문이다. 개인적으로 나는 코드(PHP)와 뷰(스마티를 사용한 템플릿)을 서로 명확히 분리하는 편을 선호한다. 나는 개발자가 게을러져서 HTML에 로직, 심지어 데이터베이스 호출 로직까지도 추가하는 일을 자주 목격했다. 하지만 이렇게 개발하면, 유지보수하는 일이 쉽게 악몽이 되어버리고 만다. 또한 나는 스마티가 HTML의 <>와는 달리 {}를 구분자로 사용하는 방식이 마음에 든다. 이처럼 구분자가 다르기 때문에, 스마티 태그를 식별하기가 수월해진다. 이러한 사실은 아래의 코드에서 잘 드러난다.


스마티를 사용하는 경우:

<title>{$title}</title>


PHP를 사용하는 경우:

<title><?php echo $title;?></title>


한가지 성가신 점은 HTML에 꺽쇠가 있는 경우다. 예를 들어 인라인 자바스크립트나 인라인 스타일시트를 사용하는 경우다. 이때는 이들 꺽쇠를 반드시 이스케이프 처리를 해야만 스마티 태그로 해석되지 않는다. 또는 스마티로 해석되지 않도록 꺼두고 싶은 영역이 있다면, {literal}과 {/literal}을 사용하면 된다. 예를 들어 다음과 같다.


<script type="text/javascript">

  {literal}

  function a(b, c) {

      alert('function a('+b+', '+c+') called!');

  }

  {/literal}

</script>


{literal}과 {/literal}은 원하는 어디에서도 사용할 수 있는데, 심지어 단일 문자를 감쌀 수도 있다. 하지만 이처럼 이스케이프 처리를 하기 보다는, 외부 자바스크립트 파일 또는 스타일시트 파일을 사용하기를 바란다. 


지금쯤이면 "스마티를 CodeIgniter와 어떻게 같이 사용하죠?"라는 질문이 떠오를 것이다. 이제 내가 어떻게 했는지 약간 시간을 내서 정리하려고 하며, 여러분도 시작할 수 있도록 몇가지 코드와 함께 예제를 보여주고자 한다.



1단계: CodeIgniter 설치하기


만약 아직 CodeIgniter를 설치하지 않았다면, 여기에서 다운로드해서 설치한다.



2단계: 스마티 설치하기


가장 최근의 스마티를 여기에서 다운로드할 수 있다. 나는 /system/libs 디렉토리를 CodeIgniter에 생성해서, smarty 디렉토리를 복사해서 넣었다. 스마티를 다른 위치에 설치하려고 한다면, Smarty.php 라이브러리 모듈에서 해당 스마티 설치 위치를 가리키도록 수정해야 한다. 가리키려는 디렉토리는 반드시 Smarty.class.php 클래스 파일을 포함하고 있어야 한다.



3단계: 템플릿 디렉토리 생성하기

나는 templates 디렉토리(스마티의 루트 템플릿 디렉토리)와 templates_c 디렉토리(스마티 템플릿이 컴파일된 버전이 저장되는 위치)를 /system/application/views에 만들었다. 이번에도 마찬가지로, 템플릿을 다른 위치에 저장하고 싶다면, Smarty.php 파일을 열어서 해당 디렉토리를 가리키도록 수정해야 한다. 이때 templates_c 디렉토리가 어플리케이션에 쓰기 권한을 가지도록 해야 한다.



4단계: 이 사이트에서 제공하는 코드 설치하기

이 사이트의 코드는 스마티와 CodeIgniter를 연동하는 Smarty 라이브러리 클래스와, CodeIgniter 기능에 접근할 수 있도록 돕는 스마티 플러그인 몇가지, 그리고 "example"이라고 불리는 작은 데모를 포함한다.


메인 클래스(물론 나는 클래스 접두어로 MY_ 가 아니라, CI를 사용하고 있다. 하지만 CodeIgniter에는 Smarty라는 이름의 클래스가 없으므로 상관없다)는 CI_Smarty이며, autoload 설정 배열에 "smaty"라는 이름으로 추가할 수 있다. 이는 다른 라이브러리 모듈을 사용하는 방식과 다를게 없다. 메인 Smarty 클래스를 상속받아서 CodeIgniter용 라이브러리로 만들었기 때문에, 기존의 Smarty API 호출을 모두 사용할 수 있다. 나는 여기에 smarty->view()라는 이름의 함수를 추가하였는데, 이 함수는 CodeIgniter의 템플릿 시스템의 parser->parse() 함수처럼 동작하는 유틸리티 함수다. 또한 스마티와 CodeIgniter 라이브러리 사이의 차이를 메울 수 있는 몇가지 플러그인을 추가하여, 템플릿에서 접근할 수 있도록 하였다. 물론 이렇게 하면서도 MVC 패러다임을 부수지 않도록 하였으며, 또한 템플릿을 호출하기 전에 $data 배열에 잡다한 정보를 꾸겨 넣는 대신에, language 파일 데이터, 검증 에러 등과 같은 요소를 더욱 쉽게 사용하도록 했다.


아래는 메인이 되는 Smarty 라이브러리 클래스다.

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');


/**

 * Smarty Class

 *

 * @package CodeIgniter

 * @subpackage Libraries

 * @category Smarty

 * @author Kepler Gelotte

 * @link http://www.coolphptools.com/codeigniter-smarty

 */

require_once( BASEPATH.'libs/smarty/libs/Smarty.class.php' );


class CI_Smarty extends Smarty {


    function CI_Smarty()

    {

        parent::Smarty();


        $this->compile_dir = APPPATH . "views/templates_c";

        $this->template_dir = APPPATH . "views/templates";

        $this->assign( 'APPPATH', APPPATH );

        $this->assign( 'BASEPATH', BASEPATH );


        log_message('debug', "Smarty Class Initialized");

    }


    function __construct()

    {

        parent::__construct();


        $this->compile_dir = APPPATH . "views/templates_c";

        $this->template_dir = APPPATH . "views/templates";

        $this->assign( 'APPPATH', APPPATH );

        $this->assign( 'BASEPATH', BASEPATH );


        // Assign CodeIgniter object by reference to CI

        if ( method_exists( $this, 'assignByRef') )

        {

            $ci =& get_instance();

            $this->assignByRef("ci", $ci);

        }


        log_message('debug', "Smarty Class Initialized");

    }



    /**

    *  Parse a template using the Smarty engine

    *

    * This is a convenience method that combines assign() and

    * display() into one step.     

    *

    * Values to assign are passed in an associative array of

    * name => value pairs.

    *

    * If the output is to be returned as a string to the caller

    * instead of being output, pass true as the third parameter.

    *

    * @access public

    * @param string

    * @param array

    * @param bool

    * @return string

    */

    function view($template, $data = array(), $return = FALSE)

    {

        foreach ($data as $key => $val)

        {

            $this->assign($key, $val);

        }

        if ($return == FALSE)

        {

            $CI =& get_instance();

            if (method_exists( $CI->output, 'set_output' ))

            {

                $CI->output->set_output( $this->fetch($template) );

            }

            else

            {

                $CI->output->final_output = $this->fetch($template);

            }

            return;

        }

        else

        {

            return $this->fetch($template);

        }

    }

}

// END Smarty Class


아래는 다운로드에 포함된 모든 파일들이다:


스마티와 연결하기 위해 사용하는 CodeIgniter 라이브러리:

/system/application/libraries/Smarty.php


CodeIgniter 클래스와 연결하기 위한 스마티 플러그인 함수:

/system/libs/smarty/libs/plugins/function.ci_config.php

/system/libs/smarty/libs/plugins/function.ci_db_session.php

/system/libs/smarty/libs/plugins/function.ci_form_validation.php

/system/libs/smarty/libs/plugins/function.ci_language.php

/system/libs/smarty/libs/plugins/function.ci_validation.php


예제 코드:

/system/application/controllers/example.php

/system/application/language/english/label_lang.php

/system/application/views/templates/example.tpl

/system/application/views/templates/header.tpl

/system/application/views/templates/footer.tpl



5단계: CodeIgniter config 수정하기


/system/application/config 디렉토리에 보면, autoload.php 파일이 있다. 파일을 열어서 'smarty'를 자동으로 로드할 라이브러리 클래스 배열에 추가하자.

/*

| -------------------------------------------------------------------

|  Auto-load Libraries

| -------------------------------------------------------------------

| These are the classes located in the system/libraries folder

| or in your application/libraries folder.

|

| Prototype:

|

| $autoload['libraries'] = array('database', 'session', 'xmlrpc');

*/


$autoload['libraries'] = array('smarty');



6단계: 예제 실행하기


모든 단계를 정확하게 설치했다면, http://yourdomain/example에 접속하면, 아래와 같은 화면을 볼 수 있다








Posted by socurites

원문: http://ellislab.com/codeigniter/user-guide/tutorial/create_news_items.html



지금쯤이면 Codegniter를 사용하여 데이터베이스에서 데이터를 읽어오는 방법을 알 것이다. 이제는 데이터베이스에 정보를 추가하는 방법을 알아보자. 이 장에서는 앞서 만든 news 컨트롤러와 모델 클래스를 확장해서, 새로운 뉴스 아이템을 추가하는 방법을 설명하려고 한다.



아이템 생성하기


데이터를 데이터베이스에 입력하기 위해서는 폼(form)을 만들어서 정보를 입력한 후 저장해야 한다. 다시 말해 2개의 필드를 가지는 폼이 필요한데, 하나는 타이틀을 나머지 하나는 텍스트를 입력하기 위한 것이다. slug는 모델의 title로부터 추출하여 만든다.


새로운 뷰 파일인 application/views/news/create.php을 만들자.

<h2>Create a news item</h2>


<?php echo validation_errors(); ?>


<?php echo form_open('news/create')

?>


<label for="title">Title</label>

<input type="input" name="title" />

<br />


<label for="text">Text</label>

<textarea name="text"></textarea>

<br />

<input type="submit" name="submit" value="Create news item" />


</form>


이 코드에서 익숙하지 않은 구문은 단지 2개 뿐이다. form_open() 함수와 validation_errors() 함수다. 


첫 번째 함수는 form_helper가 제공하며, 폼 요소를 렌더링하며 추가적인 기능을 제공한다. 예를 들면 CSFR 보호 필드와 같은 기능이 있다. 두 번째 함수는 폼 검증시 발생하는 에러를 출력하는 기능을 담당한다.


이제 news 컨트롤러로 다시 가자. 여기에서는 2가지 작업이 필요한데, 하나는 전달된 폼이 submit되었는지 확인하는 일과 나머지 일은 전달된 데이터가 유효성 규칙을 만족하는지 확인하는 일이다. 이를 위해서 form_validataion 라이브러리를 사용한다.

public function create() {

    $this -> load -> helper('form');

    $this -> load -> library('form_validation');


    $data['title'] = 'Create a news item';


    $this -> form_validation -> set_rules('title', 'Title', 'required');

    $this -> form_validation -> set_rules('text', 'text', 'required');


    if ($this -> form_validation -> run() === FALSE) {

        $this -> load -> view('templates/header', $data);

        $this -> load -> view('news/create');

        $this -> load -> view('templates/footer');


    } else {

        $this -> news_model -> set_news();

        $this -> load -> view('news/success');

    }

}


위 코드는 여러가지 기능을 추가한다. 먼저 첫 부분에서는 form_helper와 form_validation 라이브러리를 로드한다. 그리고 나서 폼 검증을 위한 규칙을 설정한다. set_rules() 메서드는 3개의 인자를 받는다. 입력 필드의 이름, 에러 메시지에서 사용할 이름, 그리고 규칙이다. 여기에서는 타이틀과 텍스트는 필수값이다.


CodeIgniter는 앞에서 보는 바와 같이 강력한 폼 검증 라이브러리를 제공한다. 폼 검증 라이브러리에 대한 자세한 설명은 여기에서 살펴보라. 


또한 폼 검증을 실행했을 때 성공했는지 검사하는 조건문이 있다. 만약 성공하지 못한다면, 폼이 재출력된다. 만약 모든 규칙을 통과하면, 모델이 호출된다. 그런 후, 뷰가 로드되어 성공 메시지를 출력한다. application/view/news/success.php 뷰 파일을 만들어서, 적당한 성공 메시지를 작성한다.



모델


마지막으로 데이터베이스에 데이터를 입력하는 메서드를 만들자. Active Record 클래스를 사용하여 정보를 입력하며, input 라이브러리를 사용하여 POST 방식으로 전달된 데이터에 접근할 것이다. 앞서 만든 모델 클래스를 열어서, 아래의 코드를 추가하자.

public function set_news() {

    $this -> load -> helper('url');


    $slug = url_title($this -> input -> post('title'), 'dash', TRUE);


    $data = array('title' => $this -> input -> post('title'), 'slug' => $slug, 'text' => $this -> input -> post('text'));


    return $this -> db -> insert('news', $data);

}


이 메서드에서는 데이터베이스에 새로운 뉴스 아이템을 입력하기 전에 신중한 처리 작업을 한다. 3번째 라인의 새로운 함수인 url_title()이 바로 그 함수다. URL helper 에서 제공하는 이 함수는 문자열을 치환한다. 공백은 모두 대시(-)로, 그리고 모든 문자를 소문자로 변환한다. 이러한 과정을 통해 적당한 slug를 만들 수 있으며, 이는 또한 URI를 만드는데도 제격이다.


데이터베이스 입력할 레코드를 준비하는 작업을 이어서 만든다. 레코드는 $data 배열에 저장한다. 각 요소는 앞서 만든 데이터베이스 테이블의 각 컬럼에 대응한다. 여기에 새로운 메서드가 나오는데, 바로 post() 메서드다. 이 메서드는  input 라이브러리에서 제공한다. 이 메서드는 데이터의 유효성을 검증하여, 공격을 시도하는 공격 문구로부터 보호하도록 해준다. input 라이브러리는 기본적으로 자동으로 로드된다. 마지막으로 $data 배열을 데이터베이스에 입력한다.



라우팅


CodeIgniter 어플리케이션에서 이제 뉴스 아이템을 추가하기 전에, 추가적인 작업이 하나 남아 있는데 바로 config/routes.php 파일에 규칙을 추가하는 일이다. 이 파일을 아래와 같이 수정한다. 이를 통해 CodeIgniter가 'create'을 뉴스 아이템의 slug가 아닌, 메서드로 인식할 수 있게 된다.

$route['news/create'] = 'news/create';

$route['news/(:any)'] = 'news/view/$1';

$route['news'] = 'news';

$route['(:any)'] = 'pages/view/$1';

$route['default_controller'] = 'pages/view';


이제 브라우저를 열어서 index.php/news/create 을 URL에 입력한 후 호출하자. 축하한다! 이제 ㅇ당신은 첫번째 CodeIgniter 어플리케이션을 완성했다. 새로운 뉴스를 몇개 추가해보고, 이전에 만든 나머지 페이지들을 사용해 보자.



Posted by socurites

원문: http://ellislab.com/codeigniter/user-guide/tutorial/news_section.html



지난 튜토리얼에서는 프레임워크의 기본 개념을 익히기 위해서 정적인 페이지를 포함하는 클래스를 작성해 봤다. 또한 URI을 더 깔끔하게 만들기 위해서, 커스텀 라우팅 규칙을 추가했다. 이제 동적인 컨텐츠를 추가하는 방법과, 데이터베이스를 사용하는 방법을 설명할 차례다.



모델 설정하기


데이터베이스를 활용하는 코드를 컨트롤러에 직접 작성하기보다는, 쿼리는 반드시 모델에 위치시켜야만 하는데, 이렇게 분리를 해야만 나중에 재사용하기가 쉽기 때문이다. 모델은 데이터베이스 또는 데이터 저장소로부터 정보를 가져오거나, 추가하고, 수정하기 위한 코드들이 위치하는 곳이다. 여러분이 가진 데이터에 해당하는 부분이 바로 모델이다.


application/models 디렉토리를 열어서, news_model.php 파일을 생성한 후, 아래의 코드를 추가한다.

<?php

class News_model extends CI_Model {

    public function __construct() {

        $this -> load -> database();

    }

}

?>


앞서 만들었던 컨트롤러 코드와 매우 유사하다. 모델은 CI_Model 클래스를 상속받아서 생성한 후, 데이터베이스 라이브러리를 로드하게 된다. 이제 $this->db 객체를 사용하여 데이터베이스 클래스를 사용할 수 있게 된다. 


데이터베이스 쿼리를 실행하기 전에, 먼저 데이터베이스 스키마를 만들어야 한다. 데이터베이스 접속한후, 아래의 SQL 명령어를 실행한다. 그리고 몇가지 샘플 레코드를 추가하자.

CREATE TABLE news (

id int(11) NOT NULL AUTO_INCREMENT,

title varchar(128) NOT NULL,

slug varchar(128) NOT NULL,

text text NOT NULL,

PRIMARY KEY (id),

KEY slug (slug)

);


역주) 아래의 입력문을 사용해서 샘플 데이터를 입력해두자

INSERT INTO news VALUES (1, 'hot item -1', 'pants-1', 'item is selled -1');

INSERT INTO news VALUES (2, 'hot item -2', 'pants-2', 'item is selled -2');

INSERT INTO news VALUES (3, 'hot item -3', 'pants-3', 'item is selled -3');


데이터베이스와 모델에 대한 준비가 되었으므로, 이제 데이터베이스로부터 모든 뉴스를 가져올 수 있는 메서드를 만들어보자. 이를 위해서는 데이터베이스 추상화 레이어가 필요하다. CodeIgniter에서는 Actie Record를 사용한다. 이처럼 추상화 레이어를 사용하ㅔ 되면, 하나의 쿼리만을 사용해서 다양한 데이터베이스 시스템에서 동작하도록 할 수 있게 된다. 아래의 코드를 모델에 추가하자.

public function get_news($slug = FALSE) {

    if ($slug === FALSE) {

        $query = $this -> db -> get('news');

        return $query -> result_array();

    }


    $query = $this -> db -> get_where('news', array('slug' => $slug));

    return $query -> row_array();

}


이 코드를 사용하면 2가지 서로 다른 쿼리를 실행할 수 있다. 모든 뉴스 레코드를 가져오거나, 또는 slug에 해당하는 뉴스 아이템만을 가져올 수도 있다. $slug 변수에 대한 유효성 검증을 하지 않은 채로 쿼리를 실행했다다는 사실을 알 수 있다. Active Record가 검증을 처리하니 신경쓰지 않아도 된다.



뉴스 표시하기


퀴리를 작성하였으니, 이제 모델과 뷰를 연결하여 뉴스 아이템을 사용장에게 표시해야 한다. 이 작업은 앞에서 만든 pages 컨트롤러를 사용하여 처리할 수 있다. 하지만 명료성을 위해서, 새로운 "news"  컨트롤러를 정의하자. application/controllers/news.php 파일을 아래와 같이 생성하자.

<?php

class News extends CI_Controller {

    public function __construct() {

        parent::__construct();

        $this -> load -> model('news_model');

    }


    public function index() {

        $data['news'] = $this -> news_model -> get_news();

    }


    public function view($slug) {

        $data['news'] = $this -> news_model -> get_news($slug);

    }

}

?>


코드를 보면, 앞에서 만든 모델 클래스와 유사하다는 점을 알 수 있다. 먼저, "__construct" 메서드다. 이 메서드에서는 부모 클래스(CI_Controller)의 생성자(__construct)를 호출한 후, 모델을 로드한다. 따라서 컨트롤러 안에서 부모 클래스와 모델 클래스의 메서드를 사용할 수 있게 된다.


두번째, 모든 뉴스 아이템을 보기 위한 메서드(index)와 특정 뉴스 하나를 보기 위한 메서드(view)가 있다. $slug 변수가 두 번째 메서드(view)에서 모델의 메서드에 전달된다는 사실을 볼 수 있다. 모델에서는 $slug 변수를 사용하여 반환할 뉴스 아이템을 식별해 낸다. 


이제 컨트롤러는 모델을 통해서 데이터를 모두가져왔지만, 아직 어느 데이터도 표시하지는 않았다. 다음으로 할일이 바로 데이터를 뷰로 전달하는 일이다.

public function index() {

    $data['news'] = $this -> news_model -> get_news();

    $data['title'] = 'News archive';


    $this -> load -> view('templates/header', $data);

    $this -> load -> view('news/index', $data);

    $this -> load -> view('templates/footer');

}


위의 코드에서는 모델로부터 모든 뉴스 레코드를 가져와서, 변수에 할당한다. 타이틀에 해당하는 값 또한 $data['title'] 요소에 할당한 후, 모든 데이터를 뷰로 전달한다. 이제는 뷰를 생성하여, 뉴스 아이템을 렌더링 해보자. application/views/news/index.php 파일을 만들어서 아래의 코드를 추가하자.

<?php foreach ($news as $news_item): ?>


    <h2><?php echo $news_item['title'] ?></h2>

    <div id="main">

        <?php echo $news_item['text'] ?>

    </div>

    <p><a href="news/<?php echo $news_item['slug'] ?>">View article</a></p>


<?php endforeach ?>


여기에서는 각 뉴스 아이템에 대해 루프를 돌면서 사용자에게 표시한다. 보다시피 여기에서는 템플릿 파일에 PHP와 HTML을 섞어서 작성했다. 만약 템플릿 엔진을 사용하고 싶다면, CodeIgniter에서 제공하는 Template Parser 클래스를 사용하거나, 또는 써드파티 파서를 사용할 수 있다.


뉴스에 대한 개략적인 정보를 보는 페이지는 다 만들었다. 이제 각 뉴스 아이템을 표시하는 페이지를 만들어보자. 앞서 만든 모델은 이 기능을 효과적으로 처리할 수 있는 형식으로 개발했다. 따라서 그저 컨트롤러에 약간의 코드를 추가하고, 새로운 뷰를 하나 만들면 충분하다. news 컨트롤러로 다시 가서, 아래와 코드를 추가하자.

public function view($slug) {

    $data['news_item'] = $this -> news_model -> get_news($slug);


    if (empty($data['news_item'])) {

        show_404();

    }


    $data['title'] = $data['news_item']['title'];


    $this -> load -> view('templates/header', $data);

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

    $this -> load -> view('templates/footer');

}


get_news() 메서드를 파라미터 없이 호출하는게 아니라, $slug 변수를 전달한다. 그래야만 특정 뉴스 아이템만을 반환하게 된다. 이제 남은 일은 대응하는 뷰를 application/views/news/view.php 파일을 만드는 일 뿐이다. 아래의 코드를 이 파일에 추가하자.

<?php

echo '<h2>'.$news_item['title'].'</h2>';

echo $news_item['text'];

?>



라우팅


앞에서 와일드카드를 이용하여 라우팅 규칙을 설정했기 때문에, 지금 만든 컨트롤러를 보기 위해서는 몇가지 라우팅을 추가할 필요가 있다. 라우팅 파일(application/config/routes.php) 파일을 아래와 같이 수정하자. 이렇게 해야만 요청이 pages 컨트롤러로 바로 전달되지 않고, news 컨트롤러로 전달되도록 할 수 있다. 첫 번째 라인에서는 slug를 가지는 URI는 news 컨트롤러의 view 메서드로 전달되도록 라우팅한다.

$route['news/(:any)'] = 'news/view/$1';

$route['news'] = 'news';

$route['default_controller'] = 'pages/view';

$route['(:any)'] = 'pages/view/$1';



  

Posted by socurites