컨트롤러 업그레이드
문서
변경된 사항
CodeIgniter 4에 네임스페이스가 추가되었으므로, 컨트롤러를 네임스페이스를 지원하도록 변경해야 합니다.
CI4 컨트롤러의 생성자는 코어 클래스를 속성에 자동으로 로드하지 않습니다.
CI4의 컨트롤러는 특별한 생성자 initController()를 가지고 있습니다.
기본 컨트롤러(CI3의
MY_Controller)가 필요하면 app/Controllers/BaseController.php를 사용하십시오.CI3처럼 컨트롤러 내에서
echo를 호출하는 것은 여전히 지원되지만, 컨트롤러에서 문자열 또는 Response 객체를 반환하는 것이 권장됩니다.
업그레이드 가이드
먼저 모든 컨트롤러 파일을 app/Controllers 폴더로 이동하십시오.
PHP 여는 태그 바로 뒤에 다음 줄을 추가하십시오:
namespace App\Controllers;extends CI_Controller를extends BaseController로 교체하십시오.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) . '!';
}
}