[CodeIgniter] 컨트롤러(Controllers) 사용방법[CodeIgniter] 컨트롤러(Controllers) 사용방법
Posted at 2019. 7. 31. 16:39 | Posted in PHP/CodeIgniter참고 : http://www.ciboard.co.kr/user_guide/kr/general/controllers.html
■ 컨트롤러란 무엇인가?
컨트롤러는 URL과 상호작용하는 클래스 파일이라고 할 수 있다.
파일명(File.php)과 클래스(File)명의 첫글자는 항상 대문자 이여야 한다.
클래스명은 컨트롤러 파일명과 동일해야 한다.
./application/controllers/Blog.php |
<?php if(!defined("BASEPATH")) { exit("No direct script access allowed"); } class Blog extends CI_Controller {
public function index() {
echo "사악미소의 현대마법의 IT공방"; } } /* END of file Blog.php */ /* Location : ./application/controllers/Blog.php */ |
# 출력결과 : http://code-igniter.com/index.php/blog/
■ 함수 호출하기
이전 예제에서 호출된 함수는 index( )였는데, index( ) 함수는 URI에서 두번째 새그먼트가 전달되지 않은 경우 기본적으로 실행이 된다.
이번에는 URI에 새그먼트 값을 추가하여 Blog라는 클래스에 comments( )라는 함수를 호출해 보자.
./application/controllers/Blog.php |
<?php if(!defined("BASEPATH")) { exit("No direct script access allowed"); } class Blog extends CI_Controller {
public function index() {
echo "사악미소의 현대마법의 IT공방"; }
public function comments() {
echo "방문해 주셔서 감사합니다"; } } /* END of file Blog.php */ /* Location : ./application/controllers/Blog.php */ |
# 출력결과 : http://code-igniter.com/index.php/blog/comments
그럼 위와 같이 새로운 메세지가 출력되는 것을 확인 할 수 있다.
■ URI 세그먼트 값을 함수에 전달하기
./application/controllers/Products.php |
<?php if(!defined("BASEPATH")) { exit("No direct script access allowed"); } class Products extends CI_Controller {
public function shoes($sandals, $id) {
echo sprintf("sandals : %s", $sandals); echo "<br/>"; echo sprintf("id : %s", $id); } } /* END of file Products.php */ /* Location : ./application/controllers/Products.php */ |
# 출력결과 : http://localhost/index.php/products/shoes/sandals/123
■ 기본 컨트롤러 정의
코드이그나이터에서는 새그먼트 없이 사이트의 루트 URI만 요청될때 실행되는 기본 컨트롤러를 지정할 수 있다.
기본 컨트롤러를 지정하려면 ../application/config/routes.php 파일의 $route[ 'default_controller' ] 의 값을 설정해 주면된다.
./application/config/routes.php |
<?php if(!defined("BASEPATH")) { exit("No direct script access allowed"); } /* 주 석 생 략 */ $route['default_controller'] = "First"; $route['404_override'] = ""; $route['translate_uri_dashes'] = FALSE; |
이제 First.php 파일을 controllers 디렉토리에 생성하고.
아래와 같은 코드를 작성해 보자.
./application/controllers/Blog.php |
<?php if(!defined("BASEPATH")) { exit("No direct script access allowed"); } class First extends CI_Controller {
public function index() {
echo "https://www.google.co.kr"; } } /* END of file First.php */ /* Location : ./application/controllers/First.php */ |
# 출력결과 : http://localhost
단순히 http://localhost라는 기본 주소를 입력하는 것만으로도
http://localhost/index.php/first 를 호출한것과 같은 결과를 얻을 수 있다.
■ 함수요청 재맵핑하기
일반적으로 URI의 두번째 새그먼트는 컨트롤러내의 어떤 함수를 실행할 것인가를 결정하낟.
이런 일반루틴을 재정의 하여 원하는 액션으로 바꿀 수 있다.
http://code-igniter.com/index.php/rmapping/zerg |
<?php if(!defined("BASEPATH")) { exit("No direct script access allowed"); } class Rmapping extends CI_Controller {
public function _remap($method) {
if($method === "zerg") {
$this->zerg();
} else if($method === "protoss") {
$this->protoss();
} else {
$this->terran(); } }
public function zerg() {
echo "군단의 심장"; }
public function protoss() {
echo "공허의 유산"; }
public function terran() {
echo "자유의 날개"; } } /* END of file Rmapping.php */ /* Location : ./application/controllers/Rmapping.php */ |
# 출력결과 : http://localhost/index.php/rmapping/zerg
위와 같이 출력되는 것을 확인 할 수 있다.
※ 참고
../application/config/routes.php 페이지의
$route['default_controller'] 값을 "Rmapping" 으로 변경하고 사용하게 되면
# 출력결과 : http://localhost/index.php/rmapping/protoss
■ Private 접근제어 함수
PHP에는 public, private, protected 라는 3가지 접근 제어자가 존재한다.
접근제어자 |
기 능 |
public |
· class 밖에서도 함수에 접근이 가능하다. · 아무것도 명시하지 않으면 기본값이 public으로 선언된다. |
private |
· 클래스 내부에서만 접근이 가능하다. · 상속이 불가능 하다. |
protected |
· 클래스 내부에서만 접근이 가능하다. · 상속이 가능하다. |
<?php if(!defined("BASEPATH")) { exit("No direct script access allowed"); } class Access extends CI_Controller {
public function index() {
echo "접 근 가 능"; }
private function _utility() {
echo "접 근 불 가"; } } /* END of file Access.php */ /* Location : ./application/controllers/Access.php */ |
# 출력결과 : http://localhost/index.php/Access/index
# 출력결과 : http://localhost/index.php/Access/_utility
위와같이 URI의 새그먼트 값으로 _utility 함수를 호출하려고 하는경우
페이지를 찾을 수 없다는 404 Page Not Found
에러가 발생하는것을 확인 할 수 있다.
■ 클래스 생성자
컨트롤러에서 생성자를 사용하고자 한다면 생성자아래 반드시 아래의 코드가 들어있어야 한다.
parent :: __construct( ); |
그렇지 않으면 직접 구현한 모든 생성자가 부모 controoler의 생성자를 재정의 하기 때문에
반드시 부모 controller를 수동으로 호출해 주어야 한다.
생성자는 클래스가 초기화될 때 어떤 기본값들을 설정해야 한다거나 어떤 프로세스를 수행해야 할때 유용하다.
생성자는 리턴값이 있어서는 안된다.
|
<?php if(!defined("BASEPATH")) { exit("No direct script access allowed"); } class Products extends CI_Controller {
public function __construct() {
parent::__construct(); } } /* END of file Products.php */ /* Location : ./application/controllers/Products.php */ |
'PHP > CodeIgniter' 카테고리의 다른 글
CI 서브 폴더 사용 (0) | 2021.02.17 |
---|---|
[CodeIgniter] _rmap을 이용한 화면 상단, 하단 레이어 고정 (0) | 2020.02.12 |
[CodeIgniter] 폼 검증하기 (0) | 2019.12.17 |
[CodeIgniter] DataBase 접속 설정하기 (0) | 2019.07.25 |
[CodeIgniter] 리눅스 환경에 코드이그나이터 세팅하기 (0) | 2019.07.23 |