CI4

[코드이그나이터] 컨트롤러 (Controller)

으누아빠 2020. 9. 3. 21:59
반응형

컨트롤러 (Controller)

출처:
http://ci4doc.cikorea.net/incoming/controllers.html

'Helloworld.php' 컨트롤러 파일의 이름은 대문자 로 시작

example.com/class/method/ID
  1. 첫 번째 세그먼트는 호출해야 하는 컨트롤러 클래스를 나타냄
  2. 두 번째 세그먼트는 호출해야 할 클래스 메소드를 나타냄
  3. 세 번째 세그먼트와 추가 세그먼트는 컨트롤러에 전달될 ID 및 변수를 나타냄

형식

<?php namespace App\Controllers;

use CodeIgniter\Controller;

class Helloworld extends Controller
    {
    public function index()
    {
        echo 'Hello World!';
    }
}

컨트롤러 클래스 이름은 대문자로 시작해야 하며, 첫번째 문자만 대문자로 표기 해야함

올바른 예

<?php namespace App\Controllers;

use CodeIgniter\Controller;

class Helloworld extends Controller {

}

틀린 예

<?php namespace App\Controllers;

use CodeIgniter\Controller;

class helloworld extends Controller {

}
<?php namespace App\Controllers;

use CodeIgniter\Controller;

class HelloWorld extends Controller {

}

메소드

URI의 두 번째 세그먼트가 일반적으로 메소드를 나타내며 만약 비어 있다면 "index" 메소드가 항상 기본적으로 로드됨

example.com/index.php/helloworld/index/
example.com/index.php/helloworld/comment/
<?php namespace App\Controllers;

use CodeIgniter\Controller;

class Helloworld extends Controller
{
    public function index()
    {
        echo 'Hello World!';
    }

    public function comment()
    {
        echo 'I am not flat!';
    }
}

메소드에 URI 세그먼트 전달

example.com/index.php/products/shoes/sandals/123
<?php namespace App\Controllers;

use CodeIgniter\Controller;

class Products extends Controller
{
    public function shoes($sandals, $id)
    {
        echo $sandals;
        echo $id;
    }
}

기본 컨트롤러 지정

기본 컨트롤러를 지정하려면 app/Config/Routes.php 에서 수정

$routes->setDefaultController('Helloworld');

비공개 메서드

protected function utility()
{
    // some code
}

컨트럴에 포함된 속성

모든 컨트롤러는 CodeIgniter\Controller 클래스를 확장

Request Object

$this->request 속성 제공

Response Object

$this->response 속성 제공

Logger Object

$this->logger 속성 제공

forceHTTPS

if (! $this->request->isSecure())
{
    $this->forceHTTPS();
}

컨트럴에서 헬퍼사용

컨트롤러가 로드될 때마다 정의된 헬퍼도 자동으로 로드

컨트롤러 내부의 어느 위치에서든 헬퍼에 정의된 메소드를 사용할 수 있음

<?php namespace App\Controllers;

use CodeIgniter\Controller;

class MyController extends Controller
{
    protected $helpers = ['url', 'form'];
}

데이터 검증

public function updateUser(int $userID)
{
    if (! $this->validate([
        'email' => "required|is_unique[users.email,id,{$userID}]",
        'name'  => 'required|alpha_numeric_spaces'
    ]))
    {
        return view('users/update', [
            'errors' => $this->validator->getErrors()
        ]);
    }

    // do something here if successful...
}