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;
}
}
