버전 4.2.0
릴리즈 날짜: 2022년 6월 3일
CodeIgniter4의 4.2.0 릴리즈
주요 사항
최소 PHP 요구 사항이 7.4로 업데이트되었습니다.
기본 설정을 더 안전하게 만들기 위해 자동 라우팅이 기본적으로 비활성화되도록 변경되었습니다.
Oracle Database용 OCI8 드라이버 (기여: `ytetsuro <https://github.com/ytetsuro>`_). Database를 참조하십시오.
개선된 자동 라우팅 (선택 사용) (기여: `kenjis <https://github.com/kenjis>`_). 새로운 개선된 자동 라우팅을 참조하십시오.
Query Builder의 서브쿼리 및 UNION 지원 (기여: `Andrey Pyzhikov <https://github.com/iRedds>`_). Database를 참조하십시오.
새로운 기여자
@fdomgjoni99가 #5608에서 첫 번째 기여를 했습니다.
@beganovich가 #5823에서 첫 번째 기여를 했습니다.
@michaelrk02가 #5878에서 첫 번째 기여를 했습니다.
@valmorflores가 #6051에서 첫 번째 기여를 했습니다.
@lonnie-vault가 #6060에서 첫 번째 기여를 했습니다.
주요 변경사항
메서드 시그니처 변경
CodeIgniter\Database\BaseBuilder::join()과CodeIgniter\Database\*\Builder::join()의 메서드 시그니처가 변경되었습니다.Validation::setRule()의 메서드 시그니처가 변경되었습니다.$rules파라미터의string타입 힌트가 제거되었습니다. 확장 클래스도 LSP를 위반하지 않도록 파라미터를 제거해야 합니다.버그 수정을 위해
CodeIgniter\CLI\CommandRunner::_remap()의 메서드 시그니처가 변경되었습니다.Service::reset()과CIUnitTestCase::resetServices()의 기본 파라미터 값이false에서true로 변경되었습니다. 이는lang()이 번역된 메시지를 가져오지 못하는 등의 테스트 중 예기치 않은 문제를 없애기 위한 것입니다.
동작 변경
CodeIgniter\CodeIgniter클래스에 새로운 속성$context가 추가되었으며 런타임에 올바른 컨텍스트를 가져야 합니다. 따라서 다음 파일들이 변경되었습니다:public/index.phpspark
system/bootstrap.php파일이 프리로딩을 쉽게 구현할 수 있도록 수정되었습니다.CodeIgniter인스턴스 반환과.env파일 로딩이index.php와spark로 이동되었습니다.CodeIgniter\Autoloader\Autoloader::initialize()의 동작이 버그 수정을 위해 변경되었습니다. 이전에는$modules->discoverInComposer가 true일 때만 Composer 클래스맵을 사용했습니다. 이제는 Composer가 사용 가능한 경우 항상 Composer 클래스맵을 사용합니다.버그 수정을 위해 CLI::color()가 출력하는 색상 코드가 변경되었습니다.
웹 브라우저에서의 예상치 못한 접근을 방지하기 위해, 컨트롤러가 CLI 라우트(
$routes->cli())에 추가된 경우 해당 컨트롤러의 모든 메서드는 더 이상 자동 라우팅을 통해 접근할 수 없습니다.History Collector를 확장하는 사용자에게 하위 호환성 문제가 발생할 수 있으며
History::setFiles()메서드를 업데이트해야 할 수 있습니다.dot_array_search()의 예상치 못한 동작이 수정되었습니다. 이제dot_array_search('foo.bar.baz', ['foo' => ['bar' => 23]])는null을 반환합니다. 이전 버전에서는23을 반환했습니다.CodeIgniter::storePreviousURL()이 Content-Type이text/html인 URL만 저장하도록 변경되었습니다. 이는previous_url()과redirect()->back()의 동작에도 영향을 미칩니다.
개선 사항
새로운 개선된 자동 라우팅
선택적으로 사용할 수 있는 새롭고 더 안전한 자동 라우터가 추가되었습니다. 기존 자동 라우팅으로부터의 변경 사항은 다음과 같습니다:
- 컨트롤러 메서드는
getIndex(),postCreate()와 같이 HTTP 동사 접두사가 필요합니다. 개발자는 항상 HTTP 메서드를 알고 있으므로 예상치 못한 HTTP 메서드로 인한 요청은 통과되지 않습니다.
- 컨트롤러 메서드는
- 기본 컨트롤러(기본값:
Home)와 기본 메서드(기본값:index)는 URI에서 생략해야 합니다. 컨트롤러 메서드와 URI 간의 일대일 대응을 제한합니다.
예를 들어, 기본적으로
/에는 접근할 수 있지만/home과/home/index는 404가 됩니다.
- 기본 컨트롤러(기본값:
- 메서드 파라미터 수를 확인합니다.
URI의 파라미터가 메서드 파라미터보다 많으면 404가 됩니다.
_remap()메서드를 지원하지 않습니다.컨트롤러 메서드와 URI 간의 일대일 대응을 제한합니다.
- 정의된 라우트의 컨트롤러에 접근할 수 없습니다.
자동 라우트를 통해 접근 가능한 컨트롤러와 정의된 라우트를 통해 접근 가능한 컨트롤러를 완전히 분리합니다.
자세한 내용은 자동 라우팅(향상)를 참조하십시오.
데이터베이스
- 데이터베이스용 새로운 OCI8 드라이버가 추가되었습니다.
Oracle Database에 접근할 수 있으며 SQL 및 PL/SQL 문을 지원합니다.
- 원시 SQL 문자열 지원
원시 SQL 문자열을 표현하는 클래스
CodeIgniter\Database\RawSql이 추가되었습니다.select(), where(), like(), join()이
CodeIgniter\Database\RawSql인스턴스를 허용합니다.DBForge::addField()의 기본값 원시 SQL 문자열 지원이 추가되었습니다. 기본값으로 Raw SQL 문자열 사용을 참조하십시오.
SQLite3에 외래 키 제약 조건을 활성화하는 새로운 설정 항목
foreignKeys가 추가되었습니다.
헬퍼 및 함수
HTML 헬퍼
script_tag()가 이제null값을 사용하여 불리언 속성을 최소화 형식으로 작성합니다:<script src="..." defer />.script_tag()의 예제 코드를 참조하십시오.get_filenames()에 네 번째 파라미터$includeDir이 추가되었습니다.get_filenames()을 참조하십시오.log_message()를 통해 기록되는 예외 정보가 개선되었습니다. 이제 예외가 발생한 파일과 줄 번호가 포함됩니다. 또한 더 이상 메시지를 잘라내지 않습니다.로그 형식도 변경되었습니다. 앱에서 로그 형식에 의존하는 경우, 새로운 로그 형식은 “<1부터 시작하는 카운트> <정리된 파일 경로>(<줄 번호>): <클래스><함수><인수>”입니다.
명령
spark db:table명령이 추가되었습니다. 자세한 내용은 데이터베이스 명령어를 참조하십시오.- 이제 터미널에서 현재 연결된 데이터베이스의 모든 테이블 이름을 볼 수 있습니다.
spark db:table --show
- 또는 테이블의 필드 이름과 레코드를 볼 수 있습니다.
spark db:table my_tablespark db:table my_table --limit-rows 50 --limit-field-value 20 --desc
- 또는 컬럼 타입, 테이블의 최대 길이 같은 메타데이터를 볼 수 있습니다.
spark db:table my_table --metadata
spark routes명령이 이제 클로저 라우트, 자동 라우트 및 필터를 표시합니다. URI 라우팅을 참조하십시오.
기타
Controller에
$this->validateData()가 추가되었습니다. $this->validateData()를 참조하십시오.- 콘텐츠 보안 정책(CSP) 개선
CSP 플레이스홀더(
{csp-script-nonce}와{csp-style-nonce})를 사용자 정의하기 위해Config\ContentSecurityPolicy에 설정$scriptNonceTag와$styleNonceTag가 추가되었습니다.CSP 플레이스홀더 교체를 비활성화하기 위해
Config\ContentSecurityPolicy에 설정$autoNonce가 추가되었습니다.nonce 속성을 가져오기 위한 함수
csp_script_nonce()와csp_style_nonce()가 추가되었습니다.자세한 내용은 콘텐츠 보안 정책를 참조하십시오.
새로운 뷰 데코레이터를 사용하면 캐싱 전에 생성된 HTML을 수정할 수 있습니다.
유효성 검사 엄격 규칙이 추가되었습니다. 전통적 규칙과 엄격한 규칙를 참조하십시오.
app/Config/Mimes.php에 webp 파일 지원이 추가되었습니다.
RouteCollection::addRedirect()가 이제 플레이스홀더를 사용할 수 있습니다. 자세한 내용은 리다이렉트 라우트를 참조하십시오.- 디버그바 개선
디버그 툴바가 이제
time()대신microtime()을 사용합니다.
프리로딩을 위한 샘플 파일이 추가되었습니다. preload.php를 참조하십시오.
변경 사항
최소 PHP 요구 사항이 7.4로 업데이트되었습니다.
기본 설정을 더 안전하게 만들기 위해 자동 라우팅이 기본적으로 비활성화되도록 변경되었습니다.
유효성 검사. 와일드카드(*)가 있는 필드 사용 시 오류 생성 방식이 변경되었습니다. 이제 오류 키에 전체 경로가 포함됩니다. 모든 오류 가져오기를 참조하십시오.
와일드카드 사용 시
Validation::getError()가 마스크에 일치하는 모든 오류를 문자열로 반환합니다.현재 버전의 콘텐츠 보안 정책(CSP)은 script 태그에 하나, style 태그에 하나의 nonce를 출력합니다. 이전 버전은 각 태그마다 하나의 nonce를 출력했습니다.
쿠키 전송 프로세스가
Response클래스로 이동되었습니다. 이제Session클래스는 쿠키를 전송하지 않고, Response에 설정합니다.
사용 중단
CodeIgniter\Database\SQLSRV\Connection::getError()가 사용 중단되었습니다. 대신CodeIgniter\Database\SQLSRV\Connection::error()를 사용하십시오.CodeIgniter\Debug\Exceptions::cleanPath()와CodeIgniter\Debug\Toolbar\Collectors\BaseCollector::cleanPath()가 사용 중단되었습니다. 대신clean_path()함수를 사용하십시오.CodeIgniter\Log\Logger::cleanFilenames()와CodeIgniter\Test\TestLogger::cleanup()이 모두 사용 중단되었습니다. 대신clean_path()함수를 사용하십시오.CodeIgniter\Router\Router::setDefaultController()가 사용 중단되었습니다.spark의 상수
SPARKED가 사용 중단되었습니다. 대신CodeIgniter\CodeIgniter의$context속성을 사용하십시오.CodeIgniter\Autoloader\Autoloader::discoverComposerNamespaces()가 사용 중단되었으며 더 이상 사용되지 않습니다.상수
EVENT_PRIORITY_LOW,EVENT_PRIORITY_NORMAL,EVENT_PRIORITY_HIGH가 사용 중단되었습니다. 대신 클래스 상수CodeIgniter\Events\Events::PRIORITY_LOW,CodeIgniter\Events\Events::PRIORITY_NORMAL,CodeIgniter\Events\Events::PRIORITY_HIGH를 사용하십시오.
버그 수정
SQLSRV 드라이버가 설정의 포트 값을 무시하는 문제가 수정되었습니다.
수정된 버그의 전체 목록은 저장소의 CHANGELOG_4.2.md을 참조하십시오.