CI 묻고 답하기

제목 함수호출에 대한 기본적인 사항 질문 드립니다.
글쓴이 StaG 작성시각 2014/07/08 23:44:00
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 14874   RSS
오늘 처음 CI를 입문했습니다.

메뉴얼도 보고 여기 질답 게시판도 참고해가면서 기존 웹사이트를 CI에 맞게 변경하고 있습니다.

그러던 도중 도저히 풀리지 않는 문제가 있어서 질문 드립니다.

일단 기본 설정값들부터 설명드리면...

http://www.cikorea.net/lecture/view/213/page/1/q/indexsubject
http://www.cikorea.net/tip/view/1312/page/1/q/indexsubject

위의 두 글을 참고하여 index.php를 주소에서 없앴습니다.

config/config.php 파일에서...
 
$config['base_url'] = 'http://192.168.56.102/web/';
이렇게 CI의 루트경로를 지정했습니다..
(application, system,index.php 파일등이 있는....) 

autoload.php에서...
$autoload['helper'] = array('url','file','html');
헬퍼를 지정해주었으며...

routes.php에는..
$route['default_controller'] = "abc";
abc.php라는 default_controller가 있습니다.

이 abc.php 컨트롤러는..
load->view('index',$data);
        }
    }
?>

이렇게 index 함수만이 존재합니다.

이 index함수는 views폴더 안에 있는 index.php 뷰를 호출합니다.(CI루트의 index.php와는 다릅니다.)

views/index.php의 내용은 아래와 같습니다.

 
<load->view('header'); ?> //Some code here... load->view('footer); ?>
긴 내용을 간략하게 줄였습니다...

모든 페이지마다 공통적으로 들어갈 메뉴를 header.php에 넣었고...

페이지 제일 아래 참고 링크등을 보여질 footer.php...

그리고 그 사이에 해당 페이지에 대한 구현 내용이 들어가 있습니다.

문제가 되는 header.php의 내용은 다음과 같습니다.
 
class Menu extends CI_Controller {
     function home() {
        $this->load->view('index');
    }
}
?>
<div>
<?=anchor('header/menu/home',img('img/logo.png'))?>
</div>

이렇게 코딩되어 있습니다.

하고자하는것은 logo 이미지를 누르면 index.php가 불리도록 하는 것입니다.

이렇게 한 후 브라우저로 실행해서 로고 이미지에 마우스를 오버하면...

http://192.168.56.102/web/header/menu/home 이런 주소를 볼 수 있습니다.


그리고 로고 이미지를 클릭하면...

Not Found

Apache/2.2.22 (Ubuntu) Server at 192.168.56.102 Port 80

이렇게 에러메세지가 노출됩니다.


상황을 이해하시는데 조금이라도 도움을 드리기 위해 최대한 자세히 서술했습니다.

어떻게 하면 이 문제를 해결할 수 있을까요.

아무리 찾아보고 소스를 이리저리 고쳐봐도 해결방도가 보이지 않네요..

답변 부탁드립니다. ㅠㅠ
 다음글 HMVC 적용 후 modules 폴더를 skin으로 바... (2)
 이전글 The Encrypt library requires t... (4)

댓글

방문넷 / 2014/07/09 08:18:33 / 추천 0
코딩을 다시 하셔야할듯싶습니다. 답변 드리는 저도 헷갈려질수밖에 없네요..

contollers / abc.php

views / header.php
         / index.php
         / footer.php

이렇게 파일구조로 하셨지요? 자 그럼 약간 도움을 드리겠습니다
1. header.php 파일안에 class를 지워주세요. class Menu extends CI_.......... Menu 컨트롤러를 만든거나 마찬가지있는데 보아하니 뷰파일에있네요?? 아님 설명과정에서 잘 못 타이핑 하셨거나요..

2. header.php 안에 anchor 코드안의 내용을 header/menu/homeabc/home 으로 변경해주세요.

3. abc컨트롤러 안에 함수를 하나 더 만들어줍니다. function home() {//코드는 알아서~}

파란색은 class를 뜻하는거구요 빨간색은 함수 입니다. 딱 감이 오시리라 굳건히 믿고 이만 물러나겠습니다~
변종원(웅파) / 2014/07/09 10:02:51 / 추천 0
작업 중지하시고 매뉴얼을 다시 한번 보시고 작업하세요.

컨트롤러, 모델, 뷰의 기본 역할과 형태를 숙지하지 못하면 프레임워크를 사용할 수 없습니다.

주소와 컨트롤러(메서드)가 매칭되고 모델에서 데이터를 어떻게 가져와서 뷰에 전달해서 화면을 출력하는지
기본 구조와 형태를 알아야 합니다.
StaG / 2014/07/11 17:33:05 / 추천 0

일이 있어서 이제야 답글을 확인했네요.. 답글 달아주신 위에 두분께 감사드립니다.

방문넷님 / 

방문넷님께서 말씀하신대로...

contollers / abc.php

views / header.php

         / index.php

         / footer.php

이러한 파일 구조를 가지고 있습니다.

또한 조언해주신 1,2,3번의 내용을 다 적용했습니다.

그리고 웹브라우저로 실행해보니...

주소창은..

http://192.168.56.102/web/abc/home

이렇게 표시가되고...

출력된 내용은...

Not Found 

The requested URL /index.php/abc/home was not found on this server.

Apache/2.2.22 (Ubuntu) Server at 192.168.56.102 Port 80

이렇습니다...

여기서 index.php/abc/home

빨간색의 index.php 파일은 CI의 루프 폴더(application, system등의 하위폴더가 있는곳)에 있는 파일인것이 맞나요?

맞는것 같기는 한데... 정확히 파악이 안되는군요...

현재...주소창에.. 

http://192.168.56.102/web/

이렇게만 넣으면 홈페이지의 첫화면이 뜹니다.

abc 컨트롤러에서….

<?php

class abc extends CI_Controller{

function index()

{

$data['page_title'] = "환영합니다.";

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

}

function home() {

$data['page_title'] = "환영합니다.";

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

}

}

?>

function index()를 해주었기 때문이라 생각됩니다.

이 function index() 부분을 없애고....

주소창에...

http://192.168.56.102/web/

이렇게 입력하면 역시나 첫화면이 뜨질 않습니다..

그런데 이상한건…function index()를 다시 넣고...

http://192.168.56.102/web/abc 이라고 치면 안뜨더군요..

http://192.168.56.102/web/abc/home 역시 뜨질 않습니다.

무엇이 문제일까요... 

고견 부탁드립니다..