在 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 菜单 的列表。
希望这对您有所帮助,感谢您的支持。
高度赞赏。
我是 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 菜单 的列表。
希望这对您有所帮助,感谢您的支持。
高度赞赏。