Version 4.2.0

Release Date: June 3, 2022

4.2.0 release of CodeIgniter4

Highlights

  • PHP 버전의 최소 요구 사항을 7.4로 업데이트합니다.

  • 기본 구성을 보다 안전하게 하기 위해 자동 라우팅이 기본적으로 비활성화로 변경되었습니다.

  • 오라클 데이터베이스용 OCI8 드라이버 (기여자 ytetsuro). ‘Database’_를 참조하세요.

  • 개선된 자동 라우팅(선택)(기여자 kenjis). New Improved Auto Routing을 참조하세요.

  • 쿼리 빌더 서브 쿼리UNION 지원(기여자 Andrey Pyzhikov). ‘Database’_를 참조하세요.

New Contributors

BREAKING

Method Signature Changes

  • CodeIgniter\Database\BaseBuilder::join()CodeIgniter\Database\*\Builder::join()의 메소드 서명이 변경되었습니다.

  • Validation::setRule()의 메소드 서명이 변경되었습니다. $rules 매개변수에 대한 string 유형 힌트가 제거되었습니다. 클래스를 확장할 때도 LSP가 깨지지 않도록 매개변수를 제거해야 합니다.

  • 버그를 수정하기 위해 CodeIgniter\CLI\CommandRunner::_remap()의 메서드 서명이 변경되었습니다.

  • Service::reset()CIUnitTestCase::resetServices()``의 기본 매개변수 값이 ``false에서 true로 변경되었습니다. 이것은 번역된 메시지를 받지 못하는 lang()과 같은 테스트 중에 예기치 않은 문제를 제거하기 위한 것입니다.

Behavior Changes

  • CodeIgniter\CodeIgniter 클래스에 $context 속성이 새로 추가되었으며 런타임 시 올바른 컨텍스트가 있어야 합니다. 따라서 다음 파일이 변경되었습니다.
    • public/index.php

    • spark

  • system/bootstrap.php 파일이 Preloading를 쉽게 구현할 수 있도록 수정되었습니다. 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()의 동작에도 영향을 줍니다.

Enhancements

New Improved Auto Routing

보다 안전한 새 자동 라우터(선택 사항)를 추가했습니다. 레거시 자동 라우팅의 변경 사항은 다음과 같습니다.

  • 컨트롤러 메소드에는 getIndex(), postCreate()와 같은 HTTP 동사 접두사가 필요합니다.
    • 개발자는 항상 HTTP 방식을 알고 있으므로 예상치 못한 HTTP 방식의 요청은 통과하지 않습니다.

  • 기본 컨트롤러(기본적으로 Home)와 기본 메서드(기본적으로 index)는 URI에서 생략되어야 합니다.
    • 컨트롤러 메서드와 URI 간의 일대일 대응을 제한합니다.

    • 예. 기본적으로 /``에 액세스할 있지만 ``/home/home/index는 404 오류입니다.

  • 메소드 파라미터 개수를 확인합니다.
    • URI에 메소드 매개변수보다 매개변수가 더 많으면 404 오류가 됩니다.

  • _remap() 메서드를 지원하지 않습니다.
    • 컨트롤러 메서드와 URI 간의 일대일 대응을 제한합니다.

  • 정의된 경로의 컨트롤러에 액세스할 수 없습니다.
    • Auto Routes를 통해 액세스할 수 있는 컨트롤러와 Defined Routes를 통해 액세스할 수 있는 컨트롤러를 완전히 분리합니다.

자세한 내용은 ref:auto-routing-improved를 참조하세요.

Database

  • 데이터베이스용 새 OCI8 드라이버가 추가되었습니다.
    • Oracle Database에 접근이 가능하며 SQL과 PL/SQL 문을 지원합니다.

  • 쿼리빌더
    • FROM 섹션에 하위 쿼리를 추가했습니다. Subqueries를 참조하세요.

    • SELECT 섹션에 하위 쿼리를 추가했습니다. Select를 참조하십시오.

    • BaseBuilder::buildSubquery() 메소드는 선택적 세 번째 인수 string $alias를 사용할 수 있습니다.

    • 연합 쿼리. Union queries을 참조하세요.

  • 원시 SQL 문자열 지원
  • SQLite3의 외래 키 제약 조건을 활성화하는 새로운 구성 항목 foreignKeys를 추가했습니다.

Helpers and Functions

  • HTML 도우미 script_tag()는 이제 null 값을 사용하여 부울 속성을 최소화된 형식으로 작성합니다. <script src="..." defer />. script_tag()의 샘플 코드를 참조하세요.

  • get_filenames()에 네 번째 매개변수 $includeDir을 추가했습니다. get_filenames()를 참조하세요.

  • log_message()를 통해 기록되는 예외 정보가 개선되었습니다. 이제 예외가 발생한 파일과 줄이 포함됩니다. 또한 더 이상 메시지를 자르지 않습니다.
    • 로그 형식도 변경되었습니다. 사용자가 앱의 로그 형식에 의존하는 경우 새 로그 형식은 “<1-based count> <cleaned filepath>(<line>): <class><function><args>”

Commands

  • 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 라우팅를 참조하세요.

Others

  • 컨트롤러에 $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()을 사용합니다.

  • Preloading에 대한 샘플 파일을 추가했습니다. preload.php를 참조하세요.

Changes

  • 최소 PHP 요구 사항을 7.4로 업데이트합니다.

  • 기본 구성을 보다 안전하게 하기 위해 자동 라우팅(auto-routing)이 기본적으로 비활성화로 변경되었습니다.

  • 검증(Validation). 와일드카드(*)가 있는 필드를 사용할 때 오류 생성이 변경되었습니다. 이제 오류 키에 전체 경로가 포함됩니다. 모든 오류 얻기를 참조하십시오.

  • 와일드카드를 사용할 때 Validation::getError()는 마스크와 일치하는 모든 발견된 오류를 문자열로 반환합니다.

  • CSP(콘텐츠 보안 정책)의 현재 버전은 스크립트에 대해 하나의 nonce를 출력하고 스타일 태그에 대해 하나를 출력합니다. 이전 버전은 각 태그에 대해 하나의 nonce를 출력했습니다.

  • 쿠키를 보내는 과정이 Response 클래스로 옮겨졌습니다. 이제 Session 클래스는 쿠키를 보내지 않고 응답으로 설정합니다.

Deprecations

  • CodeIgniter\Database\SQLSRV\Connection::getError() is deprecated. Use CodeIgniter\Database\SQLSRV\Connection::error() instead.

  • CodeIgniter\Debug\Exceptions::cleanPath() and CodeIgniter\Debug\Toolbar\Collectors\BaseCollector::cleanPath() are deprecated. Use the clean_path() function instead.

  • CodeIgniter\Log\Logger::cleanFilenames() and CodeIgniter\Test\TestLogger::cleanup() are both deprecated. Use the clean_path() function instead.

  • CodeIgniter\Router\Router::setDefaultController() is deprecated.

  • The constant SPARKED in spark is deprecated. Use the $context property in CodeIgniter\CodeIgniter instead.

  • CodeIgniter\Autoloader\Autoloader::discoverComposerNamespaces() is deprecated, and no longer used.

  • The constants EVENT_PRIORITY_LOW, EVENT_PRIORITY_NORMAL and EVENT_PRIORITY_HIGH are deprecated. Use the class constants CodeIgniter\Events\Events::PRIORITY_LOW, CodeIgniter\Events\Events::PRIORITY_NORMAL and CodeIgniter\Events\Events::PRIORITY_HIGH instead.

Bugs Fixed

  • SQLSRV 드라이버는 구성에서 포트 값을 무시합니다.

수정된 전체 버그 목록은 리포지토리의 CHANGELOG.md를 참조하세요.