TIP게시판

제목 scaffolding을 하위디렉토리에서도 사용하기
글쓴이 널곰 작성시각 2010/04/07 01:19:41
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 14013   RSS

안녕하세요!  CI에 이제 막 입문한 널곰입니다.

간단하게 DB를 조작하기 위해 Scaffolding을 설정하고 사용하려는데.. "404 Not found" 가 나오네요..
알고 봣더니.. application 밑에 서브 디렉토리 만들고 거기 컨트톨러에서 사용하면 되지 않더라구요...

그래서 열씨미 구글을 뒤진 결과 아래 같은 해답을 발견하여 저만 알 수 없어 공개 합니다. ㅎㅎㅎ
혹시 저같은 경우분들 함 해보세요..

1.  system/scaffolding/Scaffolding.php 파일 수정

    -  Scaffolding 클래스에 아래 변수 추가(33 행)

       var $segment1;
    var
$segment2;

    -  Scaffolding 생성자 함수  다음과 같이 변경

    function Scaffolding($db_table, $segment1 = 1, $segment2 = 2)


    -  "// Set the base URL" 주석 부분을 아래와 같이 수정함.

     // Set the base URL
     // MODIFICATION
        
$this->segment1 = $segment1;
        
$this->segment2 = $segment2;
        
        
$this->base_url = $this->CI->config->site_url().'/';
        
$this->base_uri = '';
        
        for(
$i = 1; $i <= $this->segment1; $i++):        
            
$this->base_url .= ($i > 1) ? $this->CI->uri->slash_segment($i, 'leading') : $this->CI->uri->segment($i);
            
$this->base_uri .= ($i > 1) ? $this->CI->uri->slash_segment($i, 'leading') : $this->CI->uri->segment($i);
        endfor;    
        
        
$this->base_url .= $this->CI->uri->slash_segment($this->segment2, 'both');
        
$this->base_uri .= $this->CI->uri->slash_segment($this->segment2, 'leading');
        
// END MODIFICATION

    * 원래에는 세그먼트1 = controller  , 세그먼트2 = secret word 이지만
       수정 후에는 세그먼트 1= subdirectory, 2= controller 그리고  3= secret word. 로 한다.

    -  아래 문 을 찾아  수정함.

     찾을문장   $this->CI->uri->segment(4);

     바꿀문장   $this->CI->uri->segment($this->segment2 + 2);
    ------------------------------------------------------------
     찾을문장   'uri_segment'     => 4,

     바꿀문장   'uri_segment'     => $this->segment2 + 2,

  

2.  /system/libraries/Controller.php  파일 수정

    -  _ci_scaffolding()  함수 를  아래와 같이 수정합니다.

    function _ci_scaffolding()
    
{
        
if ($this->_ci_scaffolding === FALSE OR $this->_ci_scaff_table === FALSE)
        
{
            show_404
('Scaffolding unavailable');
        
}
        
        $commands
= array('add', 'insert', 'edit', 'update', 'view', 'delete', 'do_delete');
        
$method = ( in_array($this->uri->segment(3), $commands, TRUE)) ? $this->uri->segment(3) : NULL;
        
$segment1 = 1;
        
$segment2 = 2;
        
        if(
$method == NULL):
            
$method = ( in_array($this->uri->segment(4), $commands, TRUE) ) ? $this->uri->segment(4) : 'view';
            
$segment1 = 2;
            
$segment2 = 3;
        endif;
        
        require_once(
BASEPATH.'scaffolding/Scaffolding'.EXT);
        
$scaff = new Scaffolding($this->_ci_scaff_table, $segment1, $segment2);
        
$scaff->$method();
    
}
태그 scaffolding
 다음글 보안 참고 (3)
 이전글 set_value 시 htmlspecialchars 가... (3)

댓글

변종원(웅파) / 2010/04/07 11:06:07 / 추천 0
좋은 정보 감사합니다.

다만, core를 직접 수정하면 나중에 버전업시 다시 작업을 해야합니다. scaffolding, controlier 2개의 파일을 확장하여 사용하게 되면 ci 버전업시 그런 부분을 피해갈 수 있습니다. ^^

최용운 / 2010/04/07 11:10:43 / 추천 0
 좋은 정보 감사합니다.