버전 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를 참조하십시오.

새로운 기여자

주요 변경사항

메서드 시그니처 변경

  • 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.php

    • spark

  • system/bootstrap.php 파일이 프리로딩을 쉽게 구현할 수 있도록 수정되었습니다. CodeIgniter 인스턴스 반환과 .env 파일 로딩이 index.phpspark로 이동되었습니다.

  • 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 문을 지원합니다.

  • QueryBuilder
    • FROM 섹션에 서브쿼리가 추가되었습니다. 서브쿼리를 참조하십시오.

    • SELECT 섹션에 서브쿼리가 추가되었습니다. Select를 참조하십시오.

    • BaseBuilder::buildSubquery() 메서드가 선택적 세 번째 인수 string $alias를 받을 수 있습니다.

    • 유니온 쿼리가 추가되었습니다. Union 쿼리을 참조하십시오.

  • 원시 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_table

      • spark 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을 참조하십시오.