はじめに
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()で判定するようにしました
終わりに
まだまだテストしていくうちに出てきそうですが、とりあえず一旦終了
出てきたら追記します