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
@fdomgjoni99 made their first contribution in #5608
@beganovich made their first contribution in #5823
@michaelrk02 made their first contribution in #5878
@valmorflores made their first contribution in #6051
@lonnie-vault made their first contribution in #6060
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.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()
의 동작에도 영향을 줍니다.
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 문자열 지원
원시 SQL 문자열을 표현하는
CodeIgniter\Database\RawSql
클래스를 추가했습니다.select(), where(), like(), join()은
CodeIgniter\Database\RawSql
인스턴스를 허용합니다.DBForge::addField()
기본값 원시 SQL 문자열 지원. 원시(raw) 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. UseCodeIgniter\Database\SQLSRV\Connection::error()
instead.CodeIgniter\Debug\Exceptions::cleanPath()
andCodeIgniter\Debug\Toolbar\Collectors\BaseCollector::cleanPath()
are deprecated. Use theclean_path()
function instead.CodeIgniter\Log\Logger::cleanFilenames()
andCodeIgniter\Test\TestLogger::cleanup()
are both deprecated. Use theclean_path()
function instead.CodeIgniter\Router\Router::setDefaultController()
is deprecated.The constant
SPARKED
in spark is deprecated. Use the$context
property inCodeIgniter\CodeIgniter
instead.CodeIgniter\Autoloader\Autoloader::discoverComposerNamespaces()
is deprecated, and no longer used.The constants
EVENT_PRIORITY_LOW
,EVENT_PRIORITY_NORMAL
andEVENT_PRIORITY_HIGH
are deprecated. Use the class constantsCodeIgniter\Events\Events::PRIORITY_LOW
,CodeIgniter\Events\Events::PRIORITY_NORMAL
andCodeIgniter\Events\Events::PRIORITY_HIGH
instead.
Bugs Fixed
SQLSRV 드라이버는 구성에서 포트 값을 무시합니다.
수정된 전체 버그 목록은 리포지토리의 CHANGELOG.md를 참조하세요.