如何解决扩展Magento API-无效路径
| 我正在尝试扩展Magento API-我已按照大多数教程中的步骤进行操作,并完成了以下操作。 当我尝试调用任何扩展的api方法时,我不断从品红色获取无效的资源路径错误。 在app / etc / modules中创建名为Woe_Services.xml的Module XML描述符<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<config>
<modules>
<Woe_Services>
<active>true</active>
<codePool>local</codePool>
</Woe_Services>
</modules>
</config>
我创建了一个相应的目录结构:
-app
--code
---local
----Woe
-----Services
------etc
-------|api.xml
-------|config.xml
------Model
------- Catalog
-------- Product
--------- Attribute
---------- Api.php
我的config.xml文件如下:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<config>
<modules>
<Woe_Services>
<version>1.0</version>
</Woe_Services>
</modules>
<global>
<models>
<catalog>
<rewrite>
<product_attribute_api>Woe_Services_Model_Catalog_Product_Attribute_Api</product_attribute_api>
</rewrite>
</catalog>
</models>
</global>
</config>
我的api.xml文件如下:
<?xml version=\"1.0\"?>
<config>
<api>
<resources>
<catalog_product_attribute translate=\"title\"
module=\"catalog\">
<title>Product attributes API</title>
<model>catalog/product_attribute_api</model>
<acl>catalog/product</acl>
<methods>
<create translate=\"title\" module=\"catalog\">
<title>Create new product attribute</title>
<acl>catalog/product/attribute/create</acl>
</create>
<delete translate=\"title\" module=\"catalog\">
<title>Delete product attribute</title>
<acl>catalog/product/attribute/delete</acl>
</delete>
<addoptions translate=\"title\" module=\"catalog\">
<title>Add attribute options</title>
<acl>catalog/product/attribute/addoptions</acl>
</addoptions>
</methods>
</catalog_product_attribute>
</resources>
<acl>
<resources>
</resources>
</acl>
</api>
</config>
最后,Api.php文件如下:
<?php
/**
* @category Ajzele
* @package Ajzele_Mapy
* @copyright Copyright (c) Branko Ajzele (http://activecodeline.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
/**
* Catalog product attribute api
*
* @category Ajzele
* @package Ajzele_Mapy
* @author Branko Ajzele <ajzele@gmail.com>
*/
class Woe_Services_Model_Catalog_Product_Attribute_Api extends Mage_Catalog_Model_Product_Attribute_Api
{
/**
* Create new product attribute.
*
* @param string $attributeName
* @param array $attributeData
* @param string|int $store
* @return int
*/
public function create($attributeName,$attributeData,$store = null)
{
// create product attribute
$installer = new Mage_Catalog_Model_Resource_Eav_Mysql4_Setup(\'core_setup\');
$installer->addAttribute(\'catalog_product\',$attributeName,$attributeData);
// get product attribute id
$storeId = $this->_getStoreId($store);
$attribute = Mage::getModel(\'catalog/product\')
->setStoreId($storeId)
->getResource()
->getAttribute($attributeName);
return $attribute->getId();
}
/**
* Create attribute options
*
* @param string $attributeId
* @param array $attributeOptions
* @return int
*/
public function addoptions($attributeId,$attributeOptions)
{
$setup = new Mage_Eav_Model_Entity_Setup(\'core_setup\');
for($i = 0; $i < sizeof($attributeOptions); $i++) {
$option = array();
$option[\'attribute_id\'] = $attributeId;
$option[\'value\'][$value][0] = $attributeOptions[$i];
$setup->addAttributeOption($option);
}
return true;
}
/**
* Delete product attribute.
*
* @param string $attributeName
* @param string|int $store
* @return int
*/
public function delete($attributeName,$store = null)
{
$storeId = $this->_getStoreId($store);
$attribute = Mage::getModel(\'catalog/product\')
->setStoreId($storeId)
->getResource()
->getAttribute($attributeName);
if (!$attribute) {
$this->_fault(\'not_exists\');
}
try {
$attribute->delete();
} catch (Mage_Core_Exception $e) {
$this->_fault(\'not_deleted\',$e->getMessage());
return false;
}
return true;
}
}
解决方法
确保在服务器配置中打开重写功能。
埃文·克莱恩(Evan Klein)5月31日在17:55
,如果您使用的是肥皂,那么您将缺少一个名为wsdl.xml的关键文件,您需要在模块etc /文件夹中定义该模块;该文件应如下所示:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<definitions xmlns:typens=\"urn:{{var wsdl.name}}\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\"
xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\" xmlns=\"http://schemas.xmlsoap.org/wsdl/\"
name=\"{{var wsdl.name}}\" targetNamespace=\"urn:{{var wsdl.name}}\">
<types>
<schema xmlns=\"http://www.w3.org/2001/XMLSchema\" targetNamespace=\"urn:Magento\">
<import namespace=\"http://schemas.xmlsoap.org/soap/encoding/\" schemaLocation=\"http://schemas.xmlsoap.org/soap/encoding/\" />
<complexType name=\"TestSvcEntity\">
<all>
<element name=\"testArg\" type=\"xsd:string\" minOccurs=\"1\" />
</all>
</complexType>
<complexType name=\"testArrayOfString\">
<complexContent>
<restriction base=\"soapenc:Array\">
<attribute ref=\"soapenc:arrayType\" wsdl:arrayType=\"xsd:string[]\"/>
</restriction>
</complexContent>
</complexType>
</schema>
</types>
<message name=\"testRequest\">
<part name=\"sessionId\" type=\"xsd:string\" />
<part name=\"param1\" type=\"xsd:string\" />
</message>
<message name=\"testResponse\">
<part name=\"test_out\" type=\"xsd:string\" />
</message>
<portType name=\"{{var wsdl.handler}}PortType\">
<operation name=\"test\">
<documentation>Test</documentation>
<input message=\"typens:testRequest\" />
<output message=\"typens:testResponse\" />
</operation>
</portType>
<binding name=\"{{var wsdl.handler}}Binding\" type=\"typens:{{var wsdl.handler}}PortType\">
<soap:binding style=\"rpc\" transport=\"http://schemas.xmlsoap.org/soap/http\" />
<operation name=\"test\">
<soap:operation soapAction=\"urn:{{var wsdl.handler}}Action\" />
<input>
<soap:body namespace=\"urn:{{var wsdl.name}}\" use=\"encoded\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />
</input>
<output>
<soap:body namespace=\"urn:{{var wsdl.name}}\" use=\"encoded\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />
</output>
</operation>
</binding>
<service name=\"{{var wsdl.name}}Service\">
<port name=\"{{var wsdl.handler}}Port\" binding=\"typens:{{var wsdl.handler}}Binding\">
<soap:address location=\"{{var wsdl.url}}\" />
</port>
</service>
</definitions>
您始终可以检查您的API http://www.yoursite.com/api/v2_soap?wsdl=1,该API将显示您所有ip可用的方法。
还要检查一下:
出现您的模型并在“高级”标签下启用该模型
清除缓存
根据您的服务器配置,检查/ tmp文件夹中wsdl的缓存版本。
让我知道进展如何,是否可以解决问题。
干杯!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。