启用编译模式时,Magento Custom Api v2资源路径不可调用

时间:2015-12-15 15:55:37

标签: php api magento

启用编译后,自定义api函数调用失败,并显示错误消息“资源路径不可调用”。自定义api在未启用编译时按预期工作。

问题

是否可以配置自定义Magento api,以便在版本1.5及更高版本中禁用和启用编译时可以调用它?

启用编译后,2个变通办法将成功:

解决方法#1

重命名编译后的文件(V2中的v小写):

/includes/src/MyApi_Test_Model_Objectmodel_Api_V2.php

/includes/src/MyApi_Test_Model_Objectmodel_Api_v2.php

注意:这必须在启用编译后执行,并在每次编译时完成

解决方法#2

将原始 V 2.php文件重命名为 v 2.php in:

/app/code/local/MyApi/Test/Model/Objectmodel/Api/V2.php

注意:这将修复api函数在启用编译时100%的时间成功,但删除V2.php将在禁用编译时中断v2使用。同时拥有V2.php和v2.php将修复这两种情况,但似乎2个文件无法捆绑在一起进行部署(除了不是DRY)。

修改 添加更多细节。

我已经使用这个非常有用的answer跟踪了执行和问题,并得出以下结论(所有代码均取自1.9.1.0 CE版本):

在includes / src目录中搜索V2.php为/includes/src/MyApi_Test_Model_Objectmodel_Api_v2.php。

/var/www/html/includes/src/Mage_Api_Model_Server_Handler_Abstract.php中的“call”函数包含以下行:

$modelName = $this->_prepareResourceModelName((string) $resources->$resourceName->model);

和_prepareResourceModelName会追加_resourceSuffix,如果它存在,在这种情况下是'_v2',因为它被调用:

/app/code/core/Mage/Api/Model/Server/V2/Handler.php 
protected $_resourceSuffix = '_v2';

输出变为:

$资源 - > $ resourceName->模型= MyApi_Test_Model_Objectmodel_Api

modelName:MyApi_Test_Model_Objectmodel_Api_ v 2

1 个答案:

答案 0 :(得分:1)

  

但删除V2.php会在禁用编译时中断v2的使用

此处正确的做法是修复您的扩展程序,使其适用于名为V2.php的类文件。大写字段(即Uppercase_Word_Segments是Magento的类名标准,使用不同的约定可能会导致其他问题。