4.1.1에서 4.1.2로 업그레이드
설치 방법에 해당하는 업그레이드 지침을 참조하십시오.
주요 변경사항
current_url()과 indexPage
current_url()의 버그로 인해 프로젝트 설정에 따라 결과 URI가 올바르지 않을 수 있었습니다. 가장 중요한 문제는 indexPage가 포함되지 않았다는 점입니다. App::$indexPage를 사용하는 프로젝트는 current_url()과 이에 의존하는 모든 기능(Response Testing, Pager, Form Helper, View Parser 포함)의 값이 변경될 것을 예상하고 프로젝트를 업데이트하십시오.
캐시 키
캐시 핸들러는 키에 대한 호환성이 크게 달랐습니다. 업데이트된 캐시 드라이버는 이제 PSR-6 권장사항에 대략적으로 맞게 모든 키를 유효성 검사를 통해 처리합니다:
캐시 항목을 고유하게 식별하는 최소 하나의 문자로 이루어진 문자열입니다. 구현 라이브러리는 UTF-8 인코딩에서 A-Z, a-z, 0-9, _, . 문자로 구성된 최대 64자 길이의 키를 반드시 지원해야 합니다. 구현 라이브러리는 추가 문자, 인코딩 또는 더 긴 길이를 지원할 수 있지만 최소한 위의 요건은 충족해야 합니다. 라이브러리는 키 문자열의 적절한 이스케이프 처리를 직접 담당하되 원본 수정되지 않은 키 문자열을 반환할 수 있어야 합니다. 다음 문자는 향후 확장을 위해 예약되어 있으므로 구현 라이브러리에서 지원해서는 안 됩니다:
{}()/\@:
유효하지 않은 캐시 키를 제거하도록 프로젝트를 업데이트하십시오.
BaseConnection::query() 반환값
이전 버전에서 BaseConnection::query() 메서드는 쿼리가 실패했더라도 잘못되게 BaseResult 객체를 반환했습니다. 이제 이 메서드는 실패한 쿼리에 대해 false를 반환하고 (DBDebug가 true인 경우 예외를 던지며), 쓰기 유형 쿼리에 대해서는 boolean을 반환합니다. query() 메서드의 모든 사용을 검토하고 반환값이 Result 객체 대신 boolean일 수 있는지 확인하십시오. 쓰기 유형 쿼리가 무엇인지 파악하려면 BaseConnection::isWriteType()와 관련 Connection 클래스의 DBMS별 isWriteType() 오버라이드를 확인하십시오.
주요 기능 변경사항
ConnectionInterface::isWriteType() 선언 추가
ConnectionInterface를 구현하는 클래스를 작성한 경우, 이제 public function isWriteType($sql): bool로 선언된 isWriteType() 메서드를 구현해야 합니다. 클래스가 BaseConnection을 상속한다면 해당 클래스에서 기본 isWriteType() 메서드를 제공하므로 필요에 따라 오버라이드할 수 있습니다.
테스트 Trait
CodeIgniter\Test 네임스페이스는 개발자의 테스트 케이스 작성을 돕기 위해 크게 개선되었습니다. 가장 주목할 만한 것은 테스트 확장이 다양한 테스트 케이스 요구에 맞게 선택적으로 사용할 수 있도록 Trait으로 이동되었다는 점입니다. CIDatabaseTestCase와 FeatureTestCase 클래스는 사용 중단되었으며, 해당 메서드들은 각각 DatabaseTestTrait과 FeatureTestTrait으로 이동되었습니다. 테스트 케이스를 메인 테스트 케이스를 상속하고 필요한 trait을 사용하도록 업데이트하십시오. 예:
<?php
use CodeIgniter\Test\DatabaseTestCase;
class MyDatabaseTest extends DatabaseTestCase
{
public function testBadRow()
{
// ...
}
}
… 다음과 같이 변경됩니다:
<?php
use CodeIgniter\Test\CIUnitTestCase;
use CodeIgniter\Test\DatabaseTestTrait;
class MyDatabaseTest extends CIUnitTestCase
{
use DatabaseTestTrait;
public function testBadRow()
{
// ...
}
}
마지막으로, ControllerTester는 접근 방식을 표준화하고 업데이트된 응답 테스팅(아래 참조)을 활용하기 위해 ControllerTestTrait으로 대체되었습니다.
테스트 응답
응답 테스팅 도구가 통합 및 개선되었습니다. 새로운 TestResponse가 ControllerResponse와 FeatureResponse를 대체하며 두 클래스에서 기대하는 완전한 메서드 및 프로퍼티 집합을 제공합니다. 대부분의 경우 이러한 변경은 ControllerTestTrait과 FeatureTestCase에 의해 “내부적으로” 처리되지만 다음 두 가지 변경사항에 주의하십시오:
TestResponse의$request와$response프로퍼티는 protected로 선언되어 있으며, getter 메서드인request()와response()를 통해서만 접근해야 합니다TestResponse는getBody()와setBody()메서드가 없으며, 대신 Response 메서드를 직접 사용합니다. 예:$body = $result->response()->getBody();
프로젝트 파일
프로젝트 공간(root, app, public, writable)의 많은 파일이 업데이트되었습니다. 이러한 파일들은 시스템 범위 외부에 있으므로 직접 개입하지 않으면 변경되지 않습니다. 프로젝트 공간의 변경사항 병합을 도와주는 서드파티 CodeIgniter 모듈이 있습니다: Packagist에서 찾아보기.
참고
버그 수정을 위한 매우 드문 경우를 제외하고, 프로젝트 공간 파일에 대한 변경사항은 애플리케이션을 중단시키지 않습니다. 여기에 명시된 모든 변경사항은 다음 주요 버전까지 선택 사항이며, 필수 변경사항은 위 섹션에서 다룹니다.
내용 변경사항
다음 파일들은 중요한 변경(사용 중단 또는 시각적 조정 포함)이 있었으며, 업데이트된 버전을 애플리케이션에 병합하는 것을 권장합니다:
app/Config/App.phpapp/Config/Autoload.phpapp/Config/Cookie.phpapp/Config/Events.phpapp/Config/Exceptions.phpapp/Config/Security.phpapp/Views/errors/html/*envspark
전체 변경사항
다음은 변경이 있었던 프로젝트 공간의 모든 파일 목록입니다; 많은 파일이 런타임에 영향을 미치지 않는 단순한 주석 또는 서식 변경입니다:
app/Config/App.phpapp/Config/Autoload.phpapp/Config/ContentSecurityPolicy.phpapp/Config/Cookie.phpapp/Config/Events.phpapp/Config/Exceptions.phpapp/Config/Logger.phpapp/Config/Mimes.phpapp/Config/Modules.phpapp/Config/Security.phpapp/Controllers/BaseController.phpapp/Views/errors/html/debug.cssapp/Views/errors/html/error_404.phpapp/Views/errors/html/error_exception.phpapp/Views/welcome_message.phpcomposer.jsoncontributing/guidelines.rstenvphpstan.neon.distphpunit.xml.distpublic/.htaccesspublic/index.phprector.phpspark