CodeIgniter

Controller

CodeIgniter를 CI라고 부르겠다.

예제에서는 ooo2.org을 사용할 것인데, 이것은 실습을 위해서 임시로 만든 것이다. 접속하지 말자.

기본 사용법

만약 아래와 같은 페이지로 접근했을 때 페이지를 출력하기 위한 방법에 대해서 알아보자. 

  • http://ooo2.org/index.php/topic : '토픽 메인 페이지' 출력
  • http://ooo2.org/index.php/topic/get/1 : '토픽 1' 출력

Controller 생성

Controller가 무엇인지는 지금은 몰라도 된다. MVC 수업을 통해서 자세히 알게 되기 때문에 그대로 따라하자. 지금 주목할 것은 콘트롤러의 이름에 의해서 URL이 결정된다는 점이고, 콘트롤러를 통해서 웹페이지를 화면에 출력 할 수 있다는 점이다. (CI에서 URL 규칙 참고)

 

http://ooo2.org/index.php/topic

파일 내용은 아래와 같다. 만약 index.php 뒤에 topic이라는 경로를 사용하고 싶다면 controllers 디렉토리 밑에 topic.php라는 이름의 파일을 생성해야 한다. 그리고 이 파일은 CI_Controller이라는 클래스를 상속한 Topic라는 이름을 가지고 있어야 한다. 그리고 index라는 이름의 메소드를 구현하면 CI는 이 메소드를 호출한다. 이것은 약속이다. 

 

http://ooo2.org/index.php/topic/get

만약 topic 뒤에 get이라는 경로를 추가하고 싶다면 get이라는 이름의 메소드를 구현해야 한다. 

 

http://ooo2.org/index.php/topic/get/1

get 뒤에 1이라는 숫자에 따라 다른 페이지를 보여주고 싶다면 메소드 get이 인자를 받으면 된다. 

예제

{CodeIgniter 설치 디렉토리}/application/controllers/topic.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Topic extends CI_Controller {
	function index(){
		echo '
		<!DOCTYPE html>
		<html>
			<head>
				<meta charset="utf-8"/>
			</head>
			<body>
				토픽 메인 페이지
			</body>
		</html>
		';
	}
	function get($id){
		echo '
		<!DOCTYPE html>
		<html>
			<head>
				<meta charset="utf-8"/>
			</head>
			<body>
				토픽 '.$id.'
			</body>
		</html>
		';
	}
}
?>

URL의 중간에 index.php가 포함되어 있는 것이 거슬릴 것이다. 이것은 다소 고급 주제이기 때문에 여기서는 다루지 않는다. 이것을 처리하는 방법은 CI 한국 사용자 포럼의 글을 참고하자. (바로가기)

Tag

태그명 : Controller

태그 주소 : https://github.com/egoing/codeigniter_codeingeverbody/tree/Controller

참고

댓글

댓글 본문
  1. 존레논아부지
    2022-10-24 완
  2. dueto park
    2022.06.23. 컨트롤러 수강 완
  3. jeisyoon
    2021.08.13 Controller - OK
  4. kyh0703
    2021.08.04-OK
  5. 웹짱
    2020.10.27
  6. lunaman
    코드이그나이터 3.19 버전,
    우분투에서 사용하고 있는데
    "Controller에 생성되는 파일의 첫문자를 소문자가 아닌 대문자로 사용해야 한다"는
    문제는 없네요

    -> 모델 부분에서는 해당 문제가 발생하네요. ㅎㅎ
  7. kind65505256@gmail.com
    와따마 감사합니다... 깊은 빡침이 왔다가 님 덕분에 상쾌하기 짝이 없는 기분이 되었습니다 ㅋㅋㅋㅋㅋ
    대화보기
    • Kun-Woo Lee
      좋은 강좌 감사합니다
    • Oppa Gom
      화이팅!!
    • Hyo Joo Jeong
      해결했어요ㅠㅠ 혹시 nginx서버 쓰시는 분들 중 저같은 문제 있으시다면
      nginx.conf 파일의 sever{ } 안에

      if (!-e $request_filename ) {
      rewrite ^(.*)$ /index.php last;
      }

      이 세 줄 넣어주시면 됩니다
      대화보기
      • Hyo Joo Jeong
        파일명: Topic.php

        <?php
        defined('BASEPATH') OR exit('No direct script access allowed');
        class Topic extends CI_Controller {

        public function index(){
        echo '토픽 페이지';
        }

        public function get(){
        echo 'get';
        }

        }

        라고 하고 localhost/index.php/topic 를 주소창에 쳤는데 404에러가 뜹니다 ㅠㅠ 파일명, 클래스명 첫글자 다 대문자인데...
        localhost/index.php/welcome도 404에러가 뜹니다
        그냥 localhost 주소로 접속하면 Welcome to CodeIgniter!페이지가 잘 뜹니다
        뭐가 문제일까요 ㅠㅠ
      • 작은행복
        Topic 대문자처리해야 동작하네요~ 알려주셔서 감사합니다~~~
        대화보기
        • 김세창
          완전 재미지네요 ㅋㅋㅎㅎ
        • bearkinf
          코드이그나이터

          우분투 16.04 에 php 7버전 코드이그나이터 3.1.2 버전입니다.
          localhost/index.php/topic/ 404 에러발생하면
          어플리케이션/컨트롤러/ 클래스 이름을 php 파일 이름가 똑같이 해줘야 404 에러 안납니다.
          첫 문자가 대문자로 클래스명 파일명 똑같이 해주니 화면이 나옵니다.
        • DECIMO
          2016.09.29 감사합니다.
        • JustStudy
          고맙습니다
        • 앱카페
          댓글들을 보니 Controller에 생성되는 파일의 첫문자를 소문자가 아닌 대문자로 사용해야 한다는 글들이 많이 보이네요.
          저도 마찬가지로 이 문제로 고생을 좀 했었구요.

          이 부분이 코드이그나이터 3.0 부분부터 바뀐부분이라고 하네요.
          물론 특이점도 있습니다.

          Windows OS 에서는 이전 버전과 같이 topic.php 파일을 생성하여 ooo2.org/index.php/topic 으로 사용해도 상관 없습니다.
          하지만 리눅스에서는 ooo2.org/index.php/topic 으로 사용하면 404 에러 생깁니다.... 리눅스에서만요....
          리눅스에서는 Topic.php 로 파일 생성하여 ooo2.org/index.php/Topic 으로 사용해야 합니다.
          (이 부분이 아직 왜 인지는 모르겠지만요....)

          윈도서버나, 개인용 윈도에 php 사용하시는 분은 상관 없지만, 리눅스를 사용하시거나, 윈도에서 개발하고 리눅스 서버로 업로드하는 방식으로 작업하시는 분들은 이부분 참고하셔야 할 것 같습니다.
        • 카카오툴즈
          초보자분들은
          http://cikorea.net......tml
          여기 참조하시면 도움이 될거예요.
        • honey918
          http://codeigniter-kr.org......tml 여기 잘 나와있네요
          대화보기
          • 아직 초보라 하는 질문일 것 같은데 아시는 분은 아무나 대답해주시면 감사하겠습니다.

            초반 예문에서,>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

            http://ooo2.org......t/1

            get 뒤에 1이라는 숫자에 따라 다른 페이지를 보여주고 싶다면 메소드 get이 인자를 받으면 된다.
            >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

            이처럼 인자를 URL에 전달 해 줄 때 슬러시 이후에 값을 전달해주었습니다. 그런데 get함수 안에 또다른 함수가 존재 할 수도 있고, 단순히 get패이지 속의 다른 패이지가 존재 할 수도 있는데 위와같이하면 어느페이지의 어느 함수에 인자를 전달하는지 나중에는 햇갈릴 수도 있을 것 같습니다.
            일반적으로 슬러시는 디렉토리 속을 지칭하는 개념이고 인자를 URL로 전달할 경우는 ?이후에 전달하고 싶은 변수의 이름을 쓰고 = 이후에 값을 전달하는데 말이죠.

            혹시 index.php/topic/get/1 이처럼 3차 디렉토리까지만 사용하고 그 이후는 인자값이 들어가는게 보통인가요?
          • 왕초보
            class 첫 글자를 대문자로 시작해서 Topic을 적어야하고
            파일명도 첫 글자를 대문자로 Topic.php로 사용해야 404 에러가 안나오네요...
          • 코드이그나이터
            강좌 감사히 잘보고 있습니다

            궁금한것이 있는데요.


            코드이그나이터를 웹서버에(PHP 가 설치되어 있는) 설치를 하셨는데


            서브라임 텍스트 라는 코딩용 툴은 어디 설치 하셔서 하시는 건가요?


            저는 웹서버를 노트북에 설치했고, 맥북이나 윈도우 데스크탑에서 접속해서 코딩하려는데

            서브라임 테그스를 서버가 아닌 로컬에 설치하셔서 하는건가요?
          • 육점이
            특이한 점을 발견했는데, 정확한 이유는 찾지 못하였습니다!

            혹시 AWS를 이용해서 실습을 진행하고 계시는 분은 topic.php의 파일명을 Topic.php로 바꾸게 된다면 404페이지가 안뜨는 것 같습니다.

            안의 class명만 첫 글자를 대문자로 적으면 되는 줄 알았는데, 이상한 버그인지 아니면 이렇게 지정해 둔것인지는 잘 모르겠습니다 ㅠㅠ

            참고로 Bitnami로 로컬호스트로 진행할 때에는 topic.php가 그대로 잘 작동하였습니다!
          • swcheon
            이 강좌는 Apache를 기준으로 작성된 것 같아요. Nginx 사용자는 index.php/topic으로 접속할 수 없습니다.
            따로 Rewrite 설정을 해주어야 해요. 혹시나 삽질하시는 분들을 위해.. 올립니다. ^^

            참고자료: http://www.farinspace.com......es/
          • 일개미
            저도 같은 현상이 나타나서 서브라임텍스트 설정을 이렇게 해도 저렇게 해도 안되길래 크롬자체에서 도구-인코딩 설정을 utf-8로 선택해주니 깨지지않고 잘 나와요. 근데 이게 임시방편인지 이대로 둬도 되는건지 모르겠어요^^;
            대화보기
            • 이주영
              강의 정말 잘듣고 있습니다.

              그런데 여기서 '토픽페이지' 를 크롬에서 출력하는 과정에서 한글이 깨져서 나오는데

              어디를 수정해야 하나요??
            • 김주원
              강의 환상적입니다.정말 깔끔한 강의네요...이런 강의가 무료라니
            • flexmania
              http://주소/index.php/welcome -> 메뉴얼에 보니까 클래스명이 대문자로 시작 해야 한다라고 되어 있는데
              그것 때문이 아닌가요?
              대화보기
              • 에코
                controllers 밑에 topic.php파일만들어서 /index.php/topic으로 실행해도 404 page not found나오네요
                AWS에 설치해서 /index.php를 실행해도 /index.php/welcome도 잘 나오는데 topic.php파일에서부터
                안되는데 혹시 원인 아시면 의견 부탁드립니다. 감사합니다.
              • 다니엘
                http://주소/index.php는 Welcome 페이지가 잘 뜹니다.

                http://주소/index.php/welcome은 404 Not Found가 나옵니다.

                이 방법 저 방법으로 설정을 바꿔봐도 해결이 안되고 있네요.

                초반 부터 진입을 못하니 다음 강좌로 갈수가 없네요.

                한국사용자 포럼에서 검색해서 적용도 해보고 해도 도대체가 안됩니다.

                어느 부분을 어떻게 확인해 봐야 할까요?

                서버 OS는 FreeBSD이고 아파치, php, mysql 설치되어 있습니다.
              • 앙마
                질문이 있습니다.컨트롤러 네임이 들어가야 하는 부분에 컨트롤러 네임을 입력했는데요엔진엑스 설정을 하지 않아서 .php를 적지 않으면 인식을 하지 못해서컨트롤러 네임.php <-- 이런 방식으로 입력을 했습니다컨트롤러 네임이 들어가는 부분에는 .php가 붙으면 안되는 건가요?
              • 쌈닭
                :D