在 OctoberCMS 中创建 API(Web 服务)

Create API (Web Service) in OctoberCMS

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

我正在我的本地服务器上创建 2 个项目。一个在 Cakephp (http://localhost/5p_group/) and the other is in OctoberCMS (http://localhost/5p_front/) .

我正在使用 Static Pages plugin in my OctoberCMS project (http://localhost/5p_front/) 并且我已经使用其中的 静态页面插件 创建了页眉和页脚菜单,这在我十月的前端项目中工作正常,因为我能够分别显示页眉和页脚菜单。

我还使用 builder plugin 创建了自己的插件,并且我还能够在我的 OctoberCMS 前端显示数据。

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

我想获取两者的数据(页眉页脚菜单和存储在我的数据库中的我的插件数据 table)。

所以我想知道 OctoberCMS 是否提供了在 OctoberCMS 中创建 api 或网络服务的任何能力,以及使用 CURL 或类似 http://localhost/5p_front/getHeaderMenu, http://localhost/5p_front/getFooterMenu, http://localhost/5p_front/getPluginData 在我的 Cakephp 项目中调用它并给出响应的能力在 JSON 或 XML 中?

我们将不胜感激任何帮助或建议。

谢谢

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

在您的插件中,您可以创建一个名为 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

好的伙计们.. 最终这是我的工作,从我开发的一个插件中获取数据及其 table 记录,并获取 Header 或使用 [= 创建的页脚菜单12=]插件。

首先,如果您想在 OctoberCMS 中创建一个 API 或网络服务,您需要创建一个插件并创建一个名为 routes.php[=42= 的文件] 或者您可以简单地在您的一个插件中创建相同的文件。

所以我现在只是在我开发的一个插件中创建了 routes.php 文件来暂时测试和制作我的 Web 服务 运行。

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

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 插件来获取我的 Header 菜单,这就是我的想法。

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 项目中创建的 Header 菜单 的列表。

希望这对您有所帮助,感谢您的支持。

高度赞赏。