컨트롤러 업그레이드

문서

변경된 사항

  • CodeIgniter 4에 네임스페이스가 추가되었으므로, 컨트롤러를 네임스페이스를 지원하도록 변경해야 합니다.

  • CI4 컨트롤러의 생성자는 코어 클래스를 속성에 자동으로 로드하지 않습니다.

  • CI4의 컨트롤러는 특별한 생성자 initController()를 가지고 있습니다.

  • CI4는 CI3 방식보다 더 강력한 RequestResponses 객체를 제공합니다.

  • 기본 컨트롤러(CI3의 MY_Controller)가 필요하면 app/Controllers/BaseController.php를 사용하십시오.

  • CI3처럼 컨트롤러 내에서 echo를 호출하는 것은 여전히 지원되지만, 컨트롤러에서 문자열 또는 Response 객체를 반환하는 것이 권장됩니다.

업그레이드 가이드

  1. 먼저 모든 컨트롤러 파일을 app/Controllers 폴더로 이동하십시오.

  2. PHP 여는 태그 바로 뒤에 다음 줄을 추가하십시오: namespace App\Controllers;

  3. extends CI_Controllerextends BaseController로 교체하십시오.

  4. defined('BASEPATH') OR exit('No direct script access allowed'); 줄이 있으면 제거하십시오.

컨트롤러 구조에 하위 디렉토리를 사용하는 경우, 이에 맞게 네임스페이스를 변경해야 합니다.
예를 들어, application/controllers/users/auth/Register.php에 위치한 버전 3 컨트롤러가 있다면, 네임스페이스는 namespace App\Controllers\Users\Auth;여야 하고 버전 4에서 컨트롤러 경로는 app/Controllers/Users/Auth/Register.php와 같아야 합니다. 하위 디렉토리의 첫 글자는 반드시 대문자로 작성하십시오.
그 다음 BaseController를 확장하기 위해 네임스페이스 정의 아래에 use 구문을 추가해야 합니다: use App\Controllers\BaseController;

코드 예제

CodeIgniter 버전 3.x

경로: application/controllers:

<?php

class Helloworld extends CI_Controller
{
    public function index($name)
    {
        echo 'Hello ' . html_escape($name) . '!';
    }
}

CodeIgniter 버전 4.x

경로: app/Controllers:

<?php

namespace App\Controllers;

class Helloworld extends BaseController
{
    public function index($name)
    {
        return 'Hello ' . esc($name) . '!';
    }
}