在OctoberCMS中创建API(Web服务)

时间:2016-11-15 12:36:46

标签: api octobercms

我是OctoberCMS的新手,我确实发现它非常好。

我在本地服务器上创建了2个项目。一个在Cakephp(http://localhost/5p_group/),另一个在OctoberCMS(http://localhost/5p_front/)。

我在OctoberCMS项目中使用Static Pages插件(http://localhost/5p_front/),我使用静态页面插件创建了页眉和页脚菜单,这在10月份运行正常在前端的项目,因为我能够分别显示页眉和页脚菜单。

我还使用builder plugin创建了自己的插件,我也可以在OctoberCMS前端显示数据。

但现在我的要求是获取页眉,页脚菜单以及将我的插件数据提供给我的Cakephp项目http://localhost/5p_group/

我想获取两者的数据(Header footer菜单和存储在我的数据库表中的My plugin数据)。

所以我想知道OctoberCMS提供了在OctoberCMS中创建apis或webservices的能力以及使用CURL或类似http://localhost/5p_front/getHeaderMenuhttp://localhost/5p_front/getFooterMenu之类的东西在我的Cakephp项目中调用它的能力。 ,http://localhost/5p_front/getPluginData并以JSON或XML提供响应?

任何帮助或建议都将受到高度赞赏。

谢谢

2 个答案:

答案 0 :(得分:4)

好的..最后这里是我的工作,从我开发的插件中获取数据及其表记录,并使用Static Pages插件创建使用的页眉或页脚菜单。

首先,如果您想在OctoberCMS中创建API或Web服务,您需要创建一个插件并创建一个名为 routes.php 的文件,或者您只需在一个文件中创建相同的文件你的插件。

所以我现在只在我开发的一个插件中创建了 routes.php 文件来测试并使我的网络服务暂时运行。

首先,我想从我的插件中获取数据,该插件使用数据表来存储它..所以我刚刚完成了这个

<强> routes.php文件

use technobrave\sociallinks\Models\Sociallink;

Route::post('/getSocialLinks', function () {

    $social_links_data = Sociallink::all();

    $arr = array();
    foreach($social_links_data as $current_social_links_data)
    {       
        $arr[] = array(
                'id'=> $current_social_links_data['id'],
                'social_logo'=> $current_social_links_data->social_logo->getPath()
                );
    }
    return $arr;
});

我能够获得我想要的记录。

然后我使用Static Pages插件来获取页眉菜单,这就是我的想法。

<强> routes.php文件

/* Code to get menu item starts */ 
use Cms\Classes\ComponentBase;
use RainLab\Pages\Classes\Router;
use Cms\Classes\Theme;
use RainLab\Pages\Classes\Menu as PagesMenu;
/* Code to get menu item ends */ 

Route::post('/getHeaderMenu', function () 
{


    $menuCode = 'main-menu'; // menu code 
    $theme = Theme::getActiveTheme();


    $menu = PagesMenu::loadCached($theme, $menuCode);

    $header_menu_list = array();
    if ($menu) 
    {
        $menu_list = $menu->attributes['items'];
        if($menu_list)
        {
            $i=0;
            foreach ($menu_list as $current_menu_list) 
            {

                if($current_menu_list->reference == '')
                {
                    $current_menu_list->reference = "#";
                }
                $header_menu_list[$i] = array(
                                            'title'=>$current_menu_list->title,
                                            'url'=>$current_menu_list->reference,
                                        );

                $header_menu_list[$i]['submenu_list'] = array();


                if($current_menu_list->items)
                {

                    $sub_menu_list = $current_menu_list->items;
                    foreach ($sub_menu_list as $current_submenu_list) 
                    {
                        if($current_submenu_list->reference == '')
                        {
                            $current_submenu_list->reference = "#";
                        }


                        $header_menu_list[$i]['submenu_list'][] = array(
                                                                'title'=>$current_submenu_list->title,
                                                                'url'=>$current_submenu_list->reference,
                                                            );    
                    }

                }
                $i++;
            }
        }

    }    
    return $header_menu_list;

});

这将只是在我的OctoberCMS项目中获取我创建的标题菜单的列表。

希望这有助于并感谢您的支持人员。

非常赞赏。

答案 1 :(得分:3)

最好的方法是直接从数据库中获取数据。

在插件中,您可以创建一个名为routes.php的文件,以便为您的应用程序创建路径。

例如,您可以在routes.php

中编写类似的内容
<?php
Route::get('api/fetchModel/{id}', function($id){
    $data = \Namespace\Pluginname\Models\Model::find($id);
    return $data;
});
?>

当然,您也可以将路线重定向到插件内的控制器。要做到这一点,你可以创建一个名为http的文件夹,在其中你可以创建一个名为controllers的文件夹,在其中你可以创建你的控制器。

重定向到控制器的路由示例。

<?php
     Route::get('/welcome/{id}', 'Namespace\Pluginname\Http\Controllers\WelcomeController@index');
?>

控制器就像那样

<?php namespace Namespace\Pluginname\Http\Controllers;
use Illuminate\Routing\Controller;
class WelcomeController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Welcome Controller
    |--------------------------------------------------------------------------
    |
    | This controller renders the "marketing page" for the application and
    | is configured to only allow guests. Like most of the other sample
    | controllers, you are free to modify or remove it as you desire.
    |
    */
    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        // $this->middleware('guest');
    }
    /**
     * Show the application welcome screen to the user.
     *
     * @return Response
     */
    public function index($id)
    {
        $data = \Namespace\Pluginname\Models\Model::find($id);
        return $data;
    }
}

在这里,您可以在octoberCMS中找到一个示例API插件:https://github.com/daftspunk/oc-laravelapi-plugin