PrestaShop + Docker

Type error: Argument 7 passed to PrestaShop\PrestaShop\Core\Domain\Order\QueryResult\OrderInvoiceAddressForViewing::__construct() must be of the type string, array given, called in /var/www/html/src/Adapter/Order/QueryHandler/GetOrderForViewingHandler.php on line 330

[Symfony\Component\Debug\Exception\FatalThrowableError 0]

7番目の引数 $stateName の型エラー

以下2箇所を一時的にコメントアウト

store/src/Adapter/Order/QueryHandler/GetOrderForViewingHandler.php

        return new OrderShippingAddressForViewing(
            $address->id,
            $address->firstname,
            $address->lastname,
            $address->company,
            $address->address1,
            $address->address2,
/*            $stateName,*/
            $address->city,
            $country->name[(int) $order->getAssociatedLanguage()->getId()],
            $address->postcode,
            $address->phone,
            $address->phone_mobile,
            $address->vat_number,
            $dni
        );

        return new OrderInvoiceAddressForViewing(
            $address->id,
            $address->firstname,
            $address->lastname,
            $address->company,
            $address->address1,
            $address->address2,
/*            $stateName,*/
            $address->city,
            $country->name[(int) $order->getAssociatedLanguage()->getId()],
            $address->postcode,
            $address->phone,
            $address->phone_mobile,
            $address->vat_number,
            $dni
        );

原因

PrestaShop では、多言語対応のために State クラスの name プロパティが配列として返されることがあるようです。
この場合、特定の言語の name を取得する必要があります。

修正

$state->name が配列の場合、現在の注文の言語 ID を使用して適切な name を取得するように修正。

store/src/Adapter/Order/QueryHandler/GetOrderForViewingHandler.php

/*
        if ($address->id_state) {
            $state = new State($address->id_state);

            $stateName = $state->name;
        }
*/

        if ($address->id_state) {
            $state = new State($address->id_state);
            $langId = (int) $order->getAssociatedLanguage()->getId();

            // `name` が配列の場合、現在の言語 ID に対応する値を取得
            if (is_array($state->name)) {
                $stateName = $state->name[$langId] ?? reset($state->name);
            } else {
                $stateName = $state->name;
            }
        }