CI4 Playground v4.7.3
한국어문서
1
필터 동작 방식
요청 흐름: 요청Before FilterControllerAfter Filter응답
// app/Filters/AuthFilter.php
class AuthFilter implements FilterInterface
{
    // 컨트롤러 실행 전 호출
    public function before(RequestInterface $request, $arguments = null)
    {
        if (! session()->get('filter_logged_in')) {
            // null이 아닌 값을 반환하면 컨트롤러 실행이 중단됩니다
            return redirect()->to(base_url('examples/filters/login'))
                             ->with('error', '로그인이 필요합니다.');
        }
        // null 반환 시 → 컨트롤러 계속 실행
    }

    // 컨트롤러 실행 후 호출
    public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
    {
        // 응답 헤더 추가, 로깅 등
    }
}
2
필터 등록 & 적용
app/Config/Filters.php — 별칭 등록
public array $aliases = [
    // ... 기본 필터들 ...
    'auth-example' => \App\Filters\AuthFilter::class,
];
app/Config/Routes.php — 특정 라우트에 적용
// 단일 라우트에 필터 적용
$routes->get('examples/filters/protected', 'Examples\Filters::protectedPage',
    ['filter' => 'auth-example']
);

// 라우트 그룹 전체에 적용
$routes->group('admin', ['filter' => 'auth'], function ($routes) {
    $routes->get('dashboard', 'Admin::dashboard');
});

// Filters.php에서 URI 패턴으로 전역 적용
public array $filters = [
    'auth' => ['before' => ['admin/*']],
];
3
라이브 데모 — 인증 필터
공개 페이지

필터 없음 — 누구나 접근 가능

접근 →
보호된 페이지

auth-example 필터 적용
비로그인 시 리다이렉트

접근 시도 →
로그인

ID: demo
PW: 1234

로그인 →