【问题标题】:Prestashop 1.7 unable to save order addressPrestashop 1.7 无法保存订单地址
【发布时间】:2023-03-24 13:50:01
【问题描述】:

当我尝试在 Prestashop 1.7 中保存我的地址时出现此错误,我在后端更改了地址格式,从格式中删除国家/地区后我无法保存地址,有人可以帮我吗?

显示该错误的图像:

[PrestaShopException]

Property Address->id_country is empty
at line 915 in file classes/ObjectModel.php

910.             }
911. 
912.             $message = $this->validateField($field, $this->$field);
913.             if ($message !== true) {
914.                 if ($die) {
915.                     throw new PrestaShopException($message);
916.                 }
917.                 return $error_return ? $message : false;
918.             }
919.         }
920. 
ObjectModelCore->validateFields - [line 248 - classes/ObjectModel.php]
ObjectModelCore->getFields - [line 489 - classes/ObjectModel.php]
ObjectModelCore->add - [line 176 - classes/Address.php] - [2 Arguments]
AddressCore->add - [line 447 - classes/ObjectModel.php] - [2 Arguments]
ObjectModelCore->save - [line 76 - classes/form/CustomerAddressPersister.php]
CustomerAddressPersisterCore->save - [line 144 - classes/form/CustomerAddressForm.php] - [2 Arguments]
CustomerAddressFormCore->submit - [line 111 - classes/checkout/CheckoutAddressesStep.php]
CheckoutAddressesStepCore->handleRequest - [line 57 - classes/checkout/CheckoutProcess.php] - [1 Arguments]
CheckoutProcessCore->handleRequest - [line 199 - controllers/front/OrderController.php] - [1 Arguments]
OrderControllerCore->initContent - [line 201 - classes/controller/Controller.php]
ControllerCore->run - [line 366 - classes/Dispatcher.php]
DispatcherCore->dispatch - [line 28 - index.php]

【问题讨论】:

  • 我相信这是一个错误。它从 1.6 更改为 1.7。在 1.6 中,即使您从国家/地区地址格式中删除它,它仍然会询问国家/地区。

标签: javascript php jquery prestashop prestashop-1.7


【解决方案1】:

在 Prestashop 1.7.2.2 上遇到了同样的问题。

似乎在添加新地址时,它还没有被持久化到数据库中以返回 id_address 的自动递增 id 以便 isUsed() 函数正确评估。

在类\form\CustomerAddressPersister.php 中

public function save(Address $address, $token)
{
    if (!$this->authorizeChange($address, $token)) {
        return false;
    }

    $address->id_customer = $this->customer->id;
    $address->save();    // <-- Add this

    if ($address->isUsed()) {
        $old_address = new Address($address->id);
        $address->id = $address->id_address = null;

        return $address->save() && $old_address->delete();
    }

    return $address->save();
}

【讨论】:

  • 这个修复也适用于 PrestaShop V:7.1.33
【解决方案2】:

PrestaShop地址表中的country字段是必填项,因此无法从地址格式中删除。

请查看您商店数据库中 ps_address 表的结构以获取更多详细信息。

【讨论】:

    【解决方案3】:

    根据上述消息,即使您已从地址格式中删除国家/地区,系统仍需要用户提供地址的国家/地区 ID。

    class/Address.php文件中,您可以清楚地看到列定义变量中,id_country是必填字段,值应该是正整数。

    【讨论】:

      【解决方案4】:

      错误说:没有国家!简单的答案,只需在此处添加县:

      【讨论】:

        【解决方案5】:

        我通过将这个设置放在国家/地区解决了这个问题(v. image)setting

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-12-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-01
          • 1970-01-01
          • 2021-01-07
          • 2023-02-18
          相关资源
          最近更新 更多