[CodeIgniter 4 pre-alpha1 사용기] CodeIgniter 4 Controller 확장하기. 제작이야기 | Posted on 2017. 10. 4. 22:02
CodeIgniter 4에서는 namespace 를 사용합니다.
그렇기에 기존 코드이그나이터 2, 3버전의 방식으로는 Controller 를 확장하는것이 불가능합니다.
기존에는 application/core/MY_Controller.php 방식으로 컨트롤로의 확장이 가능했는데..
코드이그나이터4는 application/Libraries/Controller.php 에서 확장이 가능합니다.
<?php namespace App\Libraries; use CodeIgniter\HTTP\RequestInterface; use CodeIgniter\HTTP\ResponseInterface; use Config\Logger;
class Controller extends \CodeIgniter\Controller { }
파일을 생성해서 위와같이 코드를 작성합니다.
사진의 6라인에 use Config\Services; 가 있는 이유는, 26라인의 $this->view = Services::theme(); 를 사용하기위해서입니다.
그리고 application/Controllers/Test.php 컨트롤러를 작성합니다.
확장을 하지 않으면 아래와 같이 작성을 합니다.
<?php class Blog extends \CodeIgniter\Controller
{
public function index()
{
echo 'Hello World!';
}
}
위의 코드는 도큐멘트에 있는 예제입니다.
하지만 저는 코드이그나이터4의 기본 코어를 그대로 사용하는게 아닌, 확장하여 사용할것이기 때문에, 코드가 살짝 달라집니다.
<?php namespace App\Controllers;
use App\Libraries\Controller;
class Test extends Controller {
public function index () {
}
}
일단 class니까 namespace 선언을 namespace App\Controllers; 해줍니다.
그리고 확장한 컨트롤러를 사용할거니까..
use App\Libraries\Controller; 를 넣어줍니다.
컨트롤러를 확장해서 사용하는거니까..
class Test extends Controller {}
로 선언을 해주시면 됩니다.
저는 Test 컨트롤러를 생성했습니다.
이렇게 해주시면 확장한 컨트롤러를 사용할 수 있습니다.
컨트롤러를 확장하는 이유는..
현재로서는 헬퍼의 자동 로드네요.
제가 작성한 코드를 보시면 20 ~ 21라인에 $this->helpers[] = '헬퍼명'; 이 있습니다.
코드이그나이터 2, 3버전에서는 application/config/autoload.php 에서 설정하면 자동으로 로드해줬으나..
코드이그나이터4는 컨트롤러에서 자동로드합니다.
system/Controller.php 파일을 열어보시면, 99 ~ 122 라인이 초기 설정 라인인데..
코드를 잘 보시면 121라인에서 $this->loadHelpers(); 하는걸 볼 수 있습니다.
동일파일 156 ~ 168 라인을 보시면 해당 함수가 있는데..
컨트롤러의 helpers 변수에 넣어진 헬퍼들을 자동으로 로드해줍니다.
즉, 헬퍼를 매번 로드하는게 귀찮으신분은 컨트롤러를 확장해서..
parent::__construct($request, $response, $logger);
가 오기전에 헬퍼를 변수에 아래와 같이 넣어주시면 됩니다.
$this->helpers[] = 'html';
그러면 모든 페이지에서 html 헬퍼를 불러올 수 있습니다.
저는 html 헬퍼를 불러오는 이유가, 다음번글에 작성하겠지만, doctype(); 함수를 쓰기 위해 불러오고 있습니다.
제 코드상의 $this->helpers[] = 'common'; 는 직접 제작한 헬퍼입니다.
헬퍼의 제작은 기존과 동일하게 application/Helpers/common_helper.php 처럼 가능합니다.