버전 4.6.0
릴리스 날짜: 2025년 1월 19일
CodeIgniter4 4.6.0 릴리스
주요 변경사항
동작 변경사항
예외
예외 클래스가 재설계되었습니다. 자세한 내용은 예외 디자인을 참조하세요. 이에 따라 다음과 같은 주요 변경사항이 적용되었습니다:
Validation::setRule()은 이제TypeError대신CodeIgniter\Exceptions\InvalidArgumentException을 발생시킵니다.CriticalError는 이제Error대신CodeIgniter\Exceptions\RuntimeException을 상속합니다.DatabaseException은 이제Error대신CodeIgniter\Exceptions\RuntimeException을 상속합니다.ConfigException은 이제CodeIgniter\Exceptions\CriticalError대신CodeIgniter\Exceptions\RuntimeException을 상속합니다.TestException은 이제CodeIgniter\Exceptions\CriticalError대신CodeIgniter\Exceptions\LogicException을 상속합니다.
필터 변경사항
Filters 클래스가 변경되어 before 또는 after에서 동일한 필터를 다른 인자로 여러 번 실행할 수 있게 되었습니다. 자세한 내용은 업그레이드 가이드를 참조하세요.
레지스트라
레지스트라 자동 탐색이 두 번 실행되는 것을 방지하는 검사가 추가되었습니다. 두 번 실행되면 예외가 발생합니다. 비정상적인 방법을 사용하는 Registrar를 참조하세요.
Time::createFromTimestamp()
Time::createFromTimestamp()는 타임존 처리 방식이 변경되었습니다. $timezone을 명시적으로 전달하지 않으면, 이전에는 현재 설정된 기본 타임존이 사용되었지만 이제는 UTC로 설정됩니다. 자세한 내용은 업그레이드 가이드를 참조하세요.
마이크로초를 포함한 Time
Time의 일부 메서드에서 마이크로초가 손실되는 버그가 수정되었습니다. 자세한 내용은 업그레이드 가이드를 참조하세요.
Time::setTimestamp()
Time::setTimestamp()의 동작이 수정되었습니다. 자세한 내용은 업그레이드 가이드를 참조하세요.
비HTML 요청에 대한 오류 보고
이전 버전에서는 HTML을 허용하지 않는 요청이 들어올 때, CodeIgniter는 development 및 testing 환경에서만 오류 세부 정보를 표시했습니다.
하지만 사용자 정의 환경에서는 오류 세부 정보를 표시할 수 없었기 때문에, PHP ini 설정의 display_errors가 활성화된 경우 오류 세부 정보가 표시되도록 동작이 수정되었습니다.
이 수정으로 인해 HTML 요청과 비HTML 요청 모두 동일한 조건에서 오류 세부 정보가 표시됩니다.
세션 ID (SID)
이제 Session 라이브러리는 문자당 4비트의 엔트로피를 가진 PHP 기본 32자 SID 사용을 강제합니다. 자세한 내용은 업그레이드 가이드를 참조하세요.
헤더
Response 클래스로 설정한 헤더가 PHP header() 함수로 설정된 헤더를 대체합니다.
이전 버전에서는 Response 클래스로 설정한 헤더가 기존 헤더에 추가되어 변경할 방법이 없었습니다. 이로 인해 상호 배타적인 지시문으로 동일한 헤더가 설정된 경우 예기치 않은 동작이 발생할 수 있었습니다.
예를 들어, 세션은 header() 함수로 자동으로 헤더를 설정합니다:
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
따라서 Expires 헤더를 한 번 더 설정하면 중복된 헤더가 생깁니다:
$response->removeHeader('Expires'); // has no effect
return $response->setHeader('Expires', 'Sun, 17 Nov 2024 14:17:37 GMT');
응답 헤더:
Expires: Thu, 19 Nov 1981 08:52:00 GMT
// ...
Expires: Sun, 17 Nov 2024 14:17:37 GMT
이 경우 브라우저가 어떤 헤더를 선택할지, 어느 것이 올바른 헤더인지 알 수 없습니다. 이번 버전 변경으로 기존 헤더가 덮어씌워집니다:
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Expires: Sun, 17 Nov 2024 14:17:37 GMT
인터페이스 변경사항
참고
관련 CodeIgniter 핵심 클래스를 확장하거나 이 인터페이스를 구현하지 않은 경우, 이 모든 변경사항은 하위 호환성이 유지되므로 별도의 조치가 필요하지 않습니다.
Router:
RouteCollectionInterface에 다음 메서드가 추가되었습니다:getDefaultNamespace()getRoutesOptions()setHTTPVerb()isFiltered()getFiltersForRoute()
메서드 시그니처 변경사항
Router:
DefinedRouteCollector의 생성자가 변경되었습니다.RouteCollection타입힌트가RouteCollectionInterface로 변경되었습니다.View:
renderSection()메서드의 반환 타입이string으로 변경되었으며, 이제 해당 메서드는echo를 호출하지 않습니다.Time:
createFromTimestamp()의 첫 번째 매개변수 타입이int에서int|float로 변경되었으며, 반환 타입static이 추가되었습니다.Helpers:
character_limiter()의 매개변수 이름이 업데이트되었습니다. 명명된 인자를 사용하는 경우 함수 호출을 업데이트해야 합니다.
제거된 타입 정의
- Database:
BaseConnection::escapeIdentifier()의 첫 번째 매개변수의string타입이 제거되었습니다.BaseConnection::getFieldNames()와SQLite3\Connection::getFieldNames()의 첫 번째 매개변수의string타입이 제거되었습니다.BaseConnection::_listColumns(),MySQLi\Connection::_listColumns(),OCI8\Connection::_listColumns(),Postgre\Connection::_listColumns(),SQLSRV\Connection::_listColumns(),SQLite3\Connection::_listColumns()의 첫 번째 매개변수의string타입이 제거되었습니다.
제거된 사용 중단 항목
API:
CodeIgniter\API\ResponseTrait의 사용 중단된failValidationError()메서드가 제거되었습니다. 대신failValidationErrors()를 사용하세요.HTTP:
CodeIgniter\HTTP\Response와ResponseInterface의 사용 중단된getReason()메서드가 제거되었습니다. 대신getReasonPhrase()를 사용하세요.Logger: 사용 중단된
CodeIgniter\Log\Logger::cleanFilenames()와CodeIgniter\Test\TestLogger::cleanup()이 제거되었습니다. 대신clean_path()함수를 사용하세요.Router: 사용 중단된
CodeIgniter\Router\Exceptions\RedirectException이 제거되었습니다. 대신CodeIgniter\HTTP\Exceptions\RedirectException을 사용하세요.Constants: 사용 중단된
EVENT_PRIORITY_*상수가 제거되었습니다. 대신 클래스 상수CodeIgniter\Events\Events::PRIORITY_LOW,CodeIgniter\Events\Events::PRIORITY_NORMAL,CodeIgniter\Events\Events::PRIORITY_HIGH를 사용하세요.View: 사용 중단된
CodeIgniter\View\View::$currentSection속성이 제거되었습니다.Config: 사용 중단된
Config\Cache::$storePath속성이 제거되었습니다. 대신Config\Cache::$file['storePath']를 사용하세요.Formatter: 사용 중단된
Config\Format::getFormatter()가 제거되었습니다. 대신CodeIgniter\Format\Format::getFormatter()를 사용하세요.Security:
Config\Security::$samesite가 제거되었습니다. 대신Config\Cookie::$samesite를 사용하세요.Cookie:
CodeIgniter\Cookie\CookieStore의dispatch(),setRawCookie(),setCookie()메서드가 제거되었습니다. 이 메서드들은 이제CodeIgniter\HTTP\ResponseTrait의 일부입니다.
개선사항
Publisher
Publisher::discover()는 이제 두 번째 매개변수(namespace)를 허용하여 퍼블리셔를 검색할 네임스페이스를 지정할 수 있습니다. 자세한 내용은 특정 네임스페이스에서의 검색를 참조하세요.
예외
예외 클래스가 재설계되었습니다. 자세한 내용은 예외 디자인을 참조하세요. 이에 따라 다음과 같은 새로운 예외 클래스가 추가되었습니다:
CodeIgniter\Exceptions\LogicExceptionCodeIgniter\Exceptions\RuntimeExceptionCodeIgniter\Exceptions\BadFunctionCallExceptionCodeIgniter\Exceptions\BadMethodCallExceptionCodeIgniter\Exceptions\InvalidArgumentException
다음과 같은 새로운 예외 인터페이스가 추가되었습니다:
CodeIgniter\Files\Exceptions\ExceptionInterfaceCodeIgniter\HTTP\Exceptions\ExceptionInterfaceCodeIgniter\Router\Exceptions\ExceptionInterface
비HTML 응답에 대한 예외 표시는 이제 하드코딩된 환경 대신 PHP display_errors 설정에 의존합니다.
커맨드
spark routes와spark filter:check커맨드가 이제 필터 인자를 표시합니다.spark filter:check커맨드가 이제 필터 클래스 이름을 표시합니다.번역 파일을 동기화하는
spark lang:sync커맨드가 추가되었습니다. 명령을 통한 동기화 번역 파일를 참조하세요.spark phpini:check커맨드에 선택적opcache인자가 추가되어 opcache 설정 정보를 표시할 수 있습니다.
라우팅
이제 라우트 제한 시 여러 호스트명을 지정할 수 있습니다.
협상자
엄격한 로케일 비교를 활성화하는 기능 플래그
Feature::$strictLocaleNegotiation이 추가되었습니다. 이전에는Accept-language: en-US,en-GB;q=0.9와 같은 언어 헤더가 있는 요청에서en-US또는en-GB대신 첫 번째 허용 언어인en을 반환했습니다. 값을true로 설정하면 언어 코드(‘en’ - ISO 639-1)뿐만 아니라 지역 코드(‘en-US’ - ISO 639-1 + ISO 3166-1 alpha)까지 비교합니다.
페이지네이션
현재 페이지의 항목 총 수와 범위 번호를 가져오는 새로운 기능이 추가되었습니다. 자세한 내용은 페이지의 항목 수 표시를 참조하세요.
데이터베이스
기타
MySQLi에서
MYSQLI_CLIENT_FOUND_ROWS를 사용하기 위한 새로운 설정foundRows가 추가되었습니다.트랜잭션 상태를 초기화하는
BaseConnection::resetTransStatus()메서드가 추가되었습니다. 자세한 내용은 거래 상태 재설정를 참조하세요.SQLite3에 트랜잭션 중 디스크 플러시의 엄격성을 조정하는 새로운 설정 항목
synchronous가 추가되었습니다. 저널 모드가WAL로 설정된 경우 이 설정을 변경하면 유용합니다.
라이브러리
File:
File클래스에getSizeByBinaryUnit()와getSizeByMetricUnit()이 추가되었습니다. File::getSizeByBinaryUnit()와 File::getSizeByMetricUnit()를 참조하세요.FileCollection:
FileCollection클래스에retainMultiplePatterns()이 추가되었습니다. FileCollection::retainMultiplePatterns()를 참조하세요.Validation:
FileRules클래스에min_dims유효성 검사 규칙이 추가되었습니다. 유효성 검사를 참조하세요.Validation:
is_unique와is_not_unique규칙이 이제 첫 번째 매개변수의 일부로 선택적dbGroup을 허용합니다. 유효성 검사를 참조하세요.
기타
Filters: 이제 before 또는 after에서 다른 인자로 필터를 두 번 이상 실행할 수 있습니다.
Services: 서비스 캐시를 초기화하는
BaseService::resetServicesCache()메서드가 추가되었습니다. 서비스 캐시 초기화를 참조하세요.Errors: “400 Bad Request”에 대한 기본 오류 페이지가 추가되었습니다.
메시지 변경사항
Validation.min_dims메시지가 추가되었습니다.Errors.badRequest와Errors.sorryBadRequest가 추가되었습니다.
변경사항
예외
예외 클래스가 재설계되었습니다. 자세한 내용은 예외 디자인을 참조하세요. 이에 따라 다음과 같은 변경사항이 적용되었습니다:
캐시 핸들러 클래스의
deleteMatching()메서드가 이제Exception대신CodeIgniter\Exceptions\BadMethodCallException을 발생시킵니다.Cache\ResponseCache::get()이 이제Exception대신CodeIgniter\Exceptions\RuntimeException을 발생시킵니다.RuntimeException을 발생시키던 클래스들이CodeIgniter\Exceptions\RuntimeException을 발생시키도록 변경되었습니다.InvalidArgumentException을 발생시키던 클래스들이CodeIgniter\Exceptions\InvalidArgumentException을 발생시키도록 변경되었습니다.LogicException을 발생시키던 클래스들이CodeIgniter\Exceptions\LogicException을 발생시키도록 변경되었습니다.BadMethodCallException을 발생시키던 클래스들이CodeIgniter\Exceptions\BadMethodCallException을 발생시키도록 변경되었습니다.BadFunctionCallException을 발생시키던 클래스들이CodeIgniter\Exceptions\BadFunctionCallException을 발생시키도록 변경되었습니다.RedirectException은 이제Exception대신CodeIgniter\Exceptions\RuntimeException을 상속합니다.PageNotFoundException은 이제OutOfBoundsException대신CodeIgniter\Exceptions\RuntimeException을 상속합니다.
사용 중단
- Filters:
Filters의$arguments와$argumentsClass속성이 사용 중단되었습니다. 더 이상 사용되지 않습니다.Filters::getArguments()메서드가 사용 중단되었습니다. 더 이상 사용되지 않습니다.
- File:
File의getSizeByUnit()함수가 사용 중단되었습니다. 대신getSizeByBinaryUnit()또는getSizeByMetricUnit()을 사용하세요.
버그 수정
- Response:
Response클래스로 설정된 헤더가 이제 우선순위를 가지며 PHPheader()함수로 수동 설정된 헤더를 대체합니다.
View:
View::excerpt()에 멀티바이트 문자열 지원이 추가되었습니다.Helpers:
excerpt()에 멀티바이트 문자열 지원이 추가되었습니다.
수정된 버그의 전체 목록은 저장소의 CHANGELOG.md를 참조하세요.