在magento 2中添加自定义变量以在REST API中使用

时间:2017-04-08 15:17:08

标签: rest api magento2

我在我的网站上使用了一些数据,如社交链接,联系地址,联系电话,滑块横幅,我可以将它们用作块或联系页面中的html。但是我遇到了一个问题,如何将它们称为REST API。我已经使用过Magento2 API:

/V1/cmsBlock/:blockId 
/V1/cmsPage/:pageId

但respobse是html而且它太糟糕了。有什么帮助吗?

1 个答案:

答案 0 :(得分:1)

对于社交链接,联系人号码等数据,我建议您在配置中将其添加为文本,为此您可以创建具有以下结构的模块:

app/code/Jsparo/Customapi/registration.php

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Jsparo_Customapi',
    __DIR__
);

app/code/Jsparo/Customapi/etc/module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../lib/internal/Magento/Framework/Module/etc/module.xsd">
    <module name="Jsparo_Customapi" setup_version="1.0.0">
    </module>
</config>

app/code/Jsparo/Customapi/etc/adminhtml/system.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
<system>
    <tab id="jsparo" translate="label" sortOrder="1100">
        <label>Jsparo</label>
    </tab>
    <section id="jsparo_social" translate="label" type="text" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="0">
        <label>Social</label>
        <tab>jsparo</tab>
        <resource>Jsparo_Social::config</resource>
        <group id="facebook" translate="label" type="text" sortOrder="10" showInDefault="1" showInWebsite="1" showInStore="0">
            <label>Facebook</label>
            <field id="url" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="0">
                <label>Facebook Url</label>
            </field>
        </group>
    </section>
</system>
</config>

app/code/Jsparo/Customapi/etc/webapi.xml

<?xml version="1.0"?>
<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Webapi:etc/webapi.xsd">
    <route url="/V1/jsparo/facebook" method="GET">
        <service class="Jsparo\Customapi\Api\FacebookInterface" method="getUrl"/>
        <resources>
            <resource ref="anonymous"/>
        </resources>
    </route>
</routes>

app/code/Jsparo/Customapi/etc/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <preference for="Jsparo\Customapi\Api\FacebookInterface" type="Jsparo\Customapi\Model\Facebook"/>
</config>

app/code/Jsparo/Customapi/Api/FacebookInterface.php

<?php
namespace Jsparo\Customapi\Api;
interface FacebookInterface {
    /**
     * @return string $url
     */
    public function getUrl();
}

app/code/Jsparo/Customapi/Helper/Data.php

<?php
namespace Jsparo\Customapi\Helper;
use Magento\Framework\App\Helper\AbstractHelper;
class Data extends AbstractHelper {

    const prefix = 'jsparo_social/';
    private function moduleConfig($key) {
        return $this->scopeConfig->getValue(self::prefix . $key);
    }

    public function getFacebookUrl() {
        return $this->moduleConfig('facebook/url');
    }
}

app/code/Jsparo/Customapi/Model/Facebook.php

<?php
namespace Jsparo\Customapi\Model;
use Jsparo\Customapi\Helper\Data;
class Facebook implements FacebookInterface {

    private $helper;

    public function __construct(
        Data $helper
    ) {
        $this->helper = $helper;
    }

    public function getUrl() {
        return $this->helper->getFacebookUrl();
    }
}

您可能需要进行一些调整并添加所需的所有字段/ api端点。

您可以使用Magento\Framework\App\CacheInterface向您的API添加缓存,以避免执行某些计算。

请注意,我创建了具有anonymous角色的端点,因此它不受保护。

编辑:我创建了一个github repository,您可以在其中查看完整的来源并编辑上面的几个拼写错误。我假设此模块源代码已添加到app/code/Jsparo/Customapi