草庐IT

php - 扩展 Magento API - 无效路径

coder 2024-04-08 原文

我正在尝试扩展 Magento API - 我已遵循大多数教程中的步骤并完成了以下操作。 当我尝试调用任何扩展的 api 方法时,我不断收到洋红色的无效资源路径错误。

在 app/etc/modules 中创建一个名为 Woe_Services.xml 的模块 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;
    }
}

最佳答案

Make sure you turn rewrite on in the server config.

Evan Klein 5 月 31 日 17:55

关于php - 扩展 Magento API - 无效路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6138902/

有关php - 扩展 Magento API - 无效路径的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. ruby-on-rails - Rails 5 Active Record 记录无效错误 - 2

    我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa

  3. c - mkmf 在编译 C 扩展时忽略子文件夹中的文件 - 2

    我想这样组织C源代码:+/||___+ext||||___+native_extension||||___+lib||||||___(Sourcefilesarekeptinhere-maycontainsub-folders)||||___native_extension.c||___native_extension.h||___extconf.rb||___+lib||||___(Rubysourcecode)||___Rakefile我无法使此设置与mkmf一起正常工作。native_extension/lib中的文件(包含在native_extension.c中)将被完全忽略。

  4. ruby-on-rails - Rails - 使用/自定义 URL : '/dashboard' 指定根路径 - 2

    如何使此根路径转到:“/dashboard”而不仅仅是http://example.com?root:to=>'dashboard#index',:constraints=>lambda{|req|!req.session[:user_id].blank?} 最佳答案 您可以通过以下方式实现:root:to=>redirect('/dashboard')match'/dashboard',:to=>"dashboard#index",:constraints=>lambda{|req|!req.session[:user_id].b

  5. ruby - 如何根据长度将路径数组转换为嵌套数组或散列 - 2

    我需要根据字符串路径的长度将字符串路径数组转换为符号、哈希和数组的数组给定以下数组:array=["info","services","about/company","about/history/part1","about/history/part2"]我想生成以下输出,对不同级别进行分组,根据级别的结构混合使用符号和对象。产生以下输出:[:info,:services,about:[:company,history:[:part1,:part2]]]#altsyntax[:info,:services,{:about=>[:company,{:history=>[:part1,:pa

  6. ruby-on-rails - 向 Rails 3 添加 Ruby 扩展方法的最佳实践? - 2

    我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion

  7. ruby - 如何排除无效日期 ruby - 2

    我想知道我应该引用什么异常名称。我的日期无效。我检查了文档,但找不到。BeginDate.new(day,month,year)Rescueexceptionnamestatements 最佳答案 我认为您正在寻找ArgumentError.使用irb:>Date.new(2,-200,3)ArgumentError:invaliddatefrom(irb):11:in`new'from(irb):11所以beginDate.new(2,-200,3)rescueArgumentError#yourlogicend

  8. ruby-on-rails - 如何播种图像的路径? - 2

    Organization和Image具有一对一的关系。Image有一个名为filename的列,它存储文件的路径。我在Assets管道中包含这样一个文件:app/assets/other/image.jpg。播种时如何包含此文件的路径?我已经在我的种子文件中尝试过:@organization=...@organization.image.create!(filename:File.open('app/assets/other/image.jpg'))#Ialsotried:#@organization.image.create!(filename:'app/assets/other/i

  9. ruby - 如何在 ruby​​ 中复制目录结构,不包括某些文件扩展名 - 2

    我想编写一个ruby​​脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"

  10. ruby - 扩展类和实例 - 2

    这个问题有两个部分。在RubyProgrammingLanguage一书中,有一个使用模块扩展字符串对象和类的示例(第8.1.1节)。第一个问题。为什么如果您使用新方法扩展类,然后创建该类的对象/实例,则无法访问该方法?irb(main):001:0>moduleGreeter;defciao;"Ciao!";end;end=>nilirb(main):002:0>String.extend(Greeter)=>Stringirb(main):003:0>String.ciao=>"Ciao!"irb(main):004:0>x="foobar"=>"foobar"irb(main):

随机推荐