4.1.4에서 4.1.5로 업그레이드

설치 방법에 해당하는 업그레이드 지침을 참조하십시오.

주요 변경사항

BaseBuilder 및 Model 클래스의 set() 메서드 변경사항

배열과 문자열로 매개변수를 set() 메서드에 전달할 때 다르게 처리되던 버그를 수정하기 위해 $value 매개변수의 타입 캐스팅이 제거되었습니다. BaseBuilder 클래스나 Model 클래스를 직접 상속하고 set() 메서드를 수정한 경우, 메서드 정의를 public function set($key, ?string $value = '', ?bool $escape = null)에서 public function set($key, $value = '', ?bool $escape = null)으로 변경해야 합니다.

세션 DatabaseHandler의 데이터베이스 테이블 변경

최적화를 위해 세션 테이블의 다음 컬럼 타입이 변경되었습니다.

  • MySQL
    • timestamp

  • PostgreSQL
    • ip_address

    • timestamp

    • data

세션 테이블 정의를 업데이트하십시오. 새로운 정의는 세션 라이브러리를 참조하십시오.

이 변경은 v4.1.2에서 도입되었습니다. 그러나 버그로 인해 DatabaseHandler 드라이버가 제대로 작동하지 않았습니다.

CSRF 보호

버그 수정으로 인해 CSRF 필터가 적용된 경우 이제 POST 요청뿐만 아니라 PUT/PATCH/DELETE 요청에도 CSRF 보호가 작동합니다.

PUT/PATCH/DELETE 요청을 사용할 때는 CSRF 토큰을 전송해야 합니다. 해당 요청에 CSRF 보호가 필요하지 않은 경우 CSRF 필터를 제거하십시오.

이전 버전과 동일한 동작을 원한다면 app/Config/Filters.php에서 다음과 같이 CSRF 필터를 설정하십시오:

<?php

namespace Config;

use CodeIgniter\Config\BaseConfig;

class Filters extends BaseConfig
{
    // ...

    public $methods = [
        'GET'  => ['csrf'],
        'POST' => ['csrf'],
    ];
    // ...
}

GET 메서드 보호는 form_open()을 사용하여 CSRF 필드를 자동 생성할 때만 필요합니다.

경고

일반적으로 $methods 필터를 사용하는 경우 자동 라우팅(레거시) 비활성화를 해야 합니다. Auto Routing (Legacy)는 모든 HTTP 메서드가 컨트롤러에 접근하는 것을 허용하기 때문입니다. 예상하지 못한 메서드로 컨트롤러에 접근하면 필터를 우회할 수 있습니다.

CURLRequest 헤더 변경

이전 버전에서는 헤더를 직접 제공하지 않으면 CURLRequest가 브라우저의 요청 헤더를 전송했습니다. 이 버그가 수정되었습니다. 요청이 헤더에 의존하는 경우 업그레이드 후 요청이 실패할 수 있습니다. 이 경우 필요한 헤더를 수동으로 추가하십시오. 추가 방법은 CURLRequest 클래스를 참조하십시오.

쿼리 빌더 변경사항

최적화 및 버그 수정을 위해 주로 테스트에서 사용되는 다음 동작들이 변경되었습니다.

  • insertBatch()updateBatch()를 사용할 때 $query->getOriginalQuery()의 반환값이 변경되었습니다. 이제 바인딩된 매개변수가 포함된 쿼리가 아니라 실제로 실행된 쿼리를 반환합니다.

  • testModetrue인 경우 insertBatch()는 영향받은 행의 수 대신 SQL 문자열 배열을 반환합니다. 이 변경은 반환 데이터 타입을 updateBatch() 메서드와 동일하게 맞추기 위해 이루어졌습니다.

주요 기능 변경사항

라우트에 여러 필터 적용

라우트에 여러 필터를 설정할 수 있는 새로운 기능입니다.

중요

이 기능은 하위 호환성을 깨뜨리기 때문에 기본적으로 비활성화되어 있습니다.

이 기능을 사용하려면 app/Config/Feature.php에서 $multipleFilters 프로퍼티를 true로 설정해야 합니다. 활성화하면:

  • CodeIgniter\CodeIgniter::handleRequest()는 다음을 사용합니다
    • enableFilter() 대신 CodeIgniter\Filters\Filters::enableFilters()

  • CodeIgniter\CodeIgniter::tryToRouteIt()는 다음을 사용합니다
    • getFilter() 대신 CodeIgniter\Router\Router::getFilters()

  • CodeIgniter\Router\Router::handle()는 다음을 사용합니다
    • $filterInfo 대신 $filtersInfo 프로퍼티

    • getFilterForRoute() 대신 CodeIgniter\Router\RouteCollection::getFiltersForRoute()

위의 클래스를 상속한 경우 해당 부분을 변경해야 합니다.

다음 메서드와 프로퍼티는 사용 중단되었습니다:

  • CodeIgniter\Filters\Filters::enableFilter()

  • CodeIgniter\Router\Router::getFilter()

  • CodeIgniter\Router\RouteCollection::getFilterForRoute()

  • CodeIgniter\Router\RouteCollection$filterInfo 프로퍼티

기능에 대한 자세한 내용은 필터 적용를 참조하십시오.

프로젝트 파일

프로젝트 공간(root, app, public, writable)의 많은 파일이 업데이트되었습니다. 이러한 파일들은 시스템 범위 외부에 있으므로 직접 개입하지 않으면 변경되지 않습니다. 프로젝트 공간의 변경사항 병합을 도와주는 서드파티 CodeIgniter 모듈이 있습니다: Packagist에서 찾아보기.

참고

버그 수정을 위한 매우 드문 경우를 제외하고, 프로젝트 공간 파일에 대한 변경사항은 애플리케이션을 중단시키지 않습니다. 여기에 명시된 모든 변경사항은 다음 주요 버전까지 선택 사항이며, 필수 변경사항은 위 섹션에서 다룹니다.

내용 변경사항

다음 파일들은 중요한 변경(사용 중단 또는 시각적 조정 포함)이 있었으며, 업데이트된 버전을 애플리케이션에 병합하는 것을 권장합니다:

  • app/Config/CURLRequest.php

  • app/Config/Cache.php

  • app/Config/Feature.php

  • app/Config/Generators.php

  • app/Config/Publisher.php

  • app/Config/Security.php

  • app/Views/welcome_message.php

전체 변경사항

다음은 변경이 있었던 프로젝트 공간의 모든 파일 목록입니다; 많은 파일이 런타임에 영향을 미치지 않는 단순한 주석 또는 서식 변경입니다:

  • app/Config/CURLRequest.php

  • app/Config/Cache.php

  • app/Config/Feature.php

  • app/Config/Generators.php

  • app/Config/Kint.php

  • app/Config/Publisher.php

  • app/Config/Security.php

  • app/Views/welcome_message.php