启用编译后,自定义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
答案 0 :(得分:1)
但删除V2.php会在禁用编译时中断v2的使用
此处正确的做法是修复您的扩展程序,使其适用于名为V2.php
的类文件。大写字段(即Uppercase_Word_Segments
是Magento的类名标准,使用不同的约定可能会导致其他问题。