0
0

CakePHP4.xのアプリをCakePHP5にアップグレードする エラー解消編

Last updated at Posted at 2024-08-28

はじめに

CakePHP5にアップグレードしたところまではいいが、ここからはひたすらエラーを解消する作業になります
ここまでの手順は
とりあえずアップグレード編
にまとめてあります

env()エラー

まず遭遇したのがこちら
PHP Fatal error: Uncaught Error: Call to undefined function env()
です

こちらのおかげで解消
config/bootstrap.phpの 33行目辺りに

require CAKE . 'functions.php';

を追加しました

RequestHandlerComponentエラー

Component class RequestHandlerComponent could not be found.
って言われちゃいました
どうやら無くなったようなので、AppControllerから

$this->loadComponent('RequestHandler');

をコメントアウトしました

//$this->loadComponent('RequestHandler');

DebugKitエラー

認証のためAuthenticationプラグインを使用しています
こちらがルーティングエラーになり、DebugKitが使えなくなっていました

こちらを

        $service->setConfig([
            'unauthenticatedRedirect' => Router::url(['controller' => 'users', 'action' => 'login']),
            'queryParam' => 'redirect',
        ]);

こちらに

 $authenticationService = new AuthenticationService([
        'unauthenticatedRedirect' => Router::url('/users/login'),
        'queryParam' => 'redirect',
    ]);

config/app.phpを修正

Deprecated: Since 5.0.0: Using false to disable logging scopes is deprecated. Use null instead.
と言われちゃいました

config/app.phpの

/*
     * Configures logging options
     */
    'Log' => [
        'debug' => [
            'className' => FileLog::class,
            'path' => LOGS,
            'file' => 'debug',
            'url' => env('LOG_DEBUG_URL', null),
            'scopes' => false,
            'levels' => ['notice', 'info', 'debug'],
        ],
        'error' => [
            'className' => FileLog::class,
            'path' => LOGS,
            'file' => 'error',
            'url' => env('LOG_ERROR_URL', null),
            'scopes' => false,
            'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
        ],

の'scopes' => false,を'scopes' => null,に修正します

Filesystemが無い

Class "Cake\Filesystem\File" not found
ファイル関連のclassが無いといわれます

上記を見ると廃止になったわけではなさそう
vender/cakephp/src を確認すると以前はあった「Filesystem」というフォルダがなくなっています
CakePHP4のvender/cakephp/srcからFilesystemフォルダをコピーしてとりあえず解決

追記:
削除されてるんですね

Filesystem
Filesystem というパッケージは削除されました。 Filesystem というクラスは Utility のパッケージに移動されました。

ということなので、
use Cake\Filesystem\File;

use Cake\Utility\Filesystem;
に置き換えて書き換えるか、当てにしないで自前で自前で処理するかって感じでしょうか?

Entity::has()を修正

has()で空かどうかを判定していましたが、ちゃんとhasValue()で判定するようにしました

終わりに

まだまだテストしていくうちに出てきそうですが、とりあえず一旦終了
出てきたら追記します

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0