Bonjour,
De mon coté, j'ai également un problème avec un écran qui ressemble fort a ceux montré par jobbamba.
J'étais sous Prestashop 1.7.6.8 et j'ai fais la mise à jour vers la dernière version 1.7.7.0, et du coté PHP, je suis sous 7.3.
Le Problème qui se produit réapparait à chaque nouvelle commande.
Lorsqu'une nouvelle commande arrive, dans le backoffice, si on veut cliquer sur la commande pour en voir le contenu, on arrive sur la page d'erreur (voir code ci-dessous). Depuis le Backoffice, si on va dans Client>Clients, puis qu'on ouvre la fiche client (du client qui a passé la commande qu'on ne peut visualiser), et qu'ensuite, on clique sur le petit crayon "Modifier" l'adresse, dans la grand espace en bas de la fiche client, on arrive sur la même page d'erreur.
JE me suis donc rendu dans la table "address" vie phpmyadmin, et j'ai constaté que certains champs de l'adresse du client avec la case à cocher "Null" qui était cochée, là où le client a laissé dans champs non renseignés. Pourtant, dans le backoffice de Prestashop, ces champs ne sont pas coché obligatoires et bien marqués "optionnels"
Qu'il y ait inscription d'un nouveau client, ou qu'un ancien client passe une commande provoque la même conséquence : les champs vides se retrouve cochés "Null"
Et je dois, manuellement rentrer dans la base de données mysqsl, dans la table "address" sur la ligne correspondant à l'adresse du client concerné, et décocher manuellement toutes les cases de la colonne "Null" pour pouvoir retrouver un accès à la commande dans le backoffice.
En résumé, j'ai l'impression que Prestashop décide lui même de rendre ces champs obligatoires sans obliger le client à les remplir, ce qui provoque des valeurs interdites dans les champs laissés vides.
Et je n'ai aucune idée de comment résoudre ce problème en dehors d'aller faire les modifications manuellement dans la base de donnée. Ce qui est tout simplement invivable.
Donc, si quelqu'un avait une bonne idée à me suggérer, ça serait super!
Voici le code d'erreur de la page en mode Debug - j'ai anonymisé certaines données qui sont liées aux données structurelles personnalisées du site (comme le nom des répertoire que j'ai remplacé par XXX) et les données du client que j'ai remplacé par les intitulés des champs (par exemple, s'il y avait "Lucien", j'ai écris "Prénom")
Type error: Argument 4 passed to PrestaShop\PrestaShop\Core\Domain\Order\QueryResult\OrderShippingAddressForViewing::__construct() must be of the type string, null given, called in /homepages/46/XXXXXXXX/htdocs/XXXXXXXXXXXXX/src/Adapter/Order/QueryHandler/GetOrderForViewingHandler.php on line 269 Exception Logs 2 Stack Trace Symfony\Component\Debug\Exception\ FatalThrowableError in src/Core/Domain/Order/QueryResult/OrderShippingAddressForViewing.php (line 90) /** * @var string */ private $mobilePhoneNumber; public function __construct( int $addressId, string $firstName, string $lastName, string $companyName, string $address1, OrderShippingAddressForViewing->__construct(161, 'Prénom', 'Nom', null, 'adresse1', '0', '', 'ville', 'France', 'codepostal', 'telephone', null) in src/Adapter/Order/QueryHandler/GetOrderForViewingHandler.php (line 269) $stateName, $address->city, $country->name[$order->id_lang], $address->postcode, $address->phone, $address->phone_mobile ); } /** * @param Order $order GetOrderForViewingHandler->getOrderShippingAddress(object(Order)) in src/Adapter/Order/QueryHandler/GetOrderForViewingHandler.php (line 186) $order->hasBeenDelivered(), $order->hasBeenShipped(), $invoiceManagementIsEnabled, new DateTimeImmutable($order->date_add), $this->getOrderCustomer($order), $this->getOrderShippingAddress($order), $this->getOrderInvoiceAddress($order), $this->getOrderProducts($query->getOrderId()), $this->getOrderHistory($order), $this->getOrderDocuments($order), $this->getOrderShipping($order), GetOrderForViewingHandler->handle(object(GetOrderForViewing)) in vendor/league/tactician/src/Handler/CommandHandlerMiddleware.php (line 71) $command, "Method '{$methodName}' does not exist on handler" ); } return $handler->{$methodName}($command); } } CommandHandlerMiddleware->execute(object(GetOrderForViewing), object(Closure)) in vendor/league/tactician/src/CommandBus.php (line 62) if (! $middleware instanceof Middleware) { throw InvalidMiddlewareException::forMiddleware($middleware); } $lastCallable = function ($command) use ($middleware, $lastCallable) { return $middleware->execute($command, $lastCallable); }; } return $lastCallable; } CommandBus->League\Tactician\{closure}(object(GetOrderForViewing)) in src/Core/CommandBus/Middleware/CommandRegisterMiddleware.php (line 79) $commandName = $this->commandNameExtractor->extract($command); $handler = $this->handlerLocator->getHandlerForCommand($commandName); $this->executedCommandRegistry->register($command, $handler); return $next($command); } } CommandRegisterMiddleware->execute(object(GetOrderForViewing), object(Closure)) in vendor/league/tactician/src/CommandBus.php (line 62) if (! $middleware instanceof Middleware) { throw InvalidMiddlewareException::forMiddleware($middleware); } $lastCallable = function ($command) use ($middleware, $lastCallable) { return $middleware->execute($command, $lastCallable); }; } return $lastCallable; } CommandBus->League\Tactician\{closure}(object(GetOrderForViewing)) in vendor/league/tactician/src/CommandBus.php (line 42) if (!is_object($command)) { throw InvalidCommandException::forUnknownValue($command); } $middlewareChain = $this->middlewareChain; return $middlewareChain($command); } /** * @param Middleware[] $middlewareList * CommandBus->handle(object(GetOrderForViewing)) in src/Core/CommandBus/TacticianCommandBusAdapter.php (line 54) /** * {@inheritdoc} */ public function handle($command) { return $this->bus->handle($command); } } TacticianCommandBusAdapter->handle(object(GetOrderForViewing)) in src/PrestaShopBundle/Controller/Admin/Sell/Order/OrderController.php (line 401) */ public function viewAction(int $orderId, Request $request): Response { try { /** @var OrderForViewing $orderForViewing */ $orderForViewing = $this->getQueryBus()->handle(new GetOrderForViewing($orderId)); } catch (OrderException $e) { $this->addFlash('error', $this->getErrorMessageForException($e, $this->getErrorMessages($e))); return $this->redirectToRoute('admin_orders_index'); } OrderController->viewAction(4969, object(Request)) in vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php (line 151) $this->dispatcher->dispatch(KernelEvents::CONTROLLER_ARGUMENTS, $event); $controller = $event->getController(); $arguments = $event->getArguments(); // call controller $response = \call_user_func_array($controller, $arguments); // view if (!$response instanceof Response) { $event = new GetResponseForControllerResultEvent($this, $request, $type, $response); $this->dispatcher->dispatch(KernelEvents::VIEW, $event); HttpKernel->handleRaw(object(Request), 1) in vendor/symfony/symfony/src/Symfony/Component/HttpKernel/HttpKernel.php (line 68) public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true) { $request->headers->set('X-Php-Ob-Level', (string) ob_get_level()); try { return $this->handleRaw($request, $type); } catch (\Exception $e) { if ($e instanceof RequestExceptionInterface) { $e = new BadRequestHttpException($e->getMessage(), $e); } if (false === $catch) { HttpKernel->handle(object(Request), 1, false) in vendor/symfony/symfony/src/Symfony/Component/HttpKernel/Kernel.php (line 200) $this->boot(); ++$this->requestStackSize; $this->resetServices = true; try { return $this->getHttpKernel()->handle($request, $type, $catch); } finally { --$this->requestStackSize; } } Kernel->handle(object(Request), 1, false) in admin006z8kx1f/index.php (line 82) $request = Request::createFromGlobals(); Request::setTrustedProxies([], Request::HEADER_X_FORWARDED_ALL); try { require_once __DIR__.'/../autoload.php'; $response = $kernel->handle($request, HttpKernelInterface::MASTER_REQUEST, false); $response->send(); $kernel->terminate($request, $response); } catch (NotFoundHttpException $exception) { define('ADMIN_LEGACY_CONTEXT', true); // correct Apache charset (except if it's too late)