PHP8にバージョンアップしたらエラー

Laravelのバージョンは8.9.0でPHPを7→8にバージョンアップしたときに出たエラーの解消方法をメモ。
以下のようなエラーが出ました。

Error
Unknown named parameter $kind

該当行は vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54Controller.phpcallActionメソッドで発生している模様。

/**
 * Execute an action on the controller.
 *
 * @param  string  $method
 * @param  array  $parameters
 * @return \Symfony\Component\HttpFoundation\Response
 */
public function callAction($method, $parameters)
{
    return call_user_func_array([$this, $method], $parameters);  // ←ここでエラーが起こってる
}

どうもコールバック関数をコールする call_user_func_array関数で渡す配列$parametersの形式に問題がありそうで探ってみた。
callActionメソッドの $parametersをダンプすると以下のような内容でした。

array(1) { ["kind"]=> string(1) "1" }

PHP7での call_user_func_array は配列のkeyが無視されていたので問題なかった様子。PHP8になって名前付き引数が追加されたためkeyが無視されなくなってしまったため起こったエラーのようです。
これにより呼び出された側の引数で、kindという名前の引数が用意されていないため、 Unknown named parameter $kindのエラーが出ていたようです。

そこで、名前付き引数でない配列を渡すように子クラスで親クラスの callActionをオーバーライドすることにしました。親クラスのメソッドを直接変更してもいいのですが、フレームワークは直接さわらないのは暗黙の解で。

public function callAction($method, $parameters)
{
    return parent::callAction($method, array_values($parameters));
}

$parameterscallAction関数に渡す前にarray_valuesで通常の配列にして渡してあげます。
array_values関数で変換すると以下のような配列を渡すことになります。

array(1) { [0]=> string(1) "1" }

できた!\(^o^)/
これはいずれLaravel側が改修するのかな?その時はまた修正しないとなー。