Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extending Magento API - Invalid Path

Tags:

php

magento

I am trying to extend the Magento API - I've followed the steps from most tutorials and have done the following. I keep getting an invalid resource path error from magenta when I try to call any of the extended api methods.

Create a Module XML descriptor in app/etc/modules called Woe_Services.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Woe_Services>
            <active>true</active>
            <codePool>local</codePool>
        </Woe_Services>
    </modules>
</config>

I created a corresponding directory structure:

-app
--code
---local
----Woe
-----Services

------etc
-------|api.xml
-------|config.xml

------Model
------- Catalog
-------- Product
--------- Attribute
---------- Api.php

My config.xml file is as follows:

<?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>

My api.xml file is as follows:

<?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>

Finally, Api.php file is as follows:

<?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 <[email protected]>
 */
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;
    }
}
like image 912
Evan Klein Avatar asked Nov 13 '22 22:11

Evan Klein


1 Answers

Make sure you turn rewrite on in the server config.

Evan Klein May 31 at 17:55

like image 79
hakre Avatar answered Nov 30 '22 22:11

hakre