route.php
Route::group(['prefix' => 'fapi/', 'middleware' => ['web']], function () {
Route::any('{slug}', 'Cloud\Rent\Classes\Api\ApiRouter@route')->where('slug', '(.*)?');
});
ApiRouter.php
<?php namespace Cloud\Rent\Classes\Api;
use App;
use Illuminate\Routing\Controller as ControllerBase;
use October\Rain\Router\Helper as RouterHelper;
use Illuminate\Support\Str;
/**
* Class ApiRouter
* API例子:在Now\Youpin\Api下建类Auth,里面有public function hello(),可以通过http://host/api/auth/hello
* @package Now\Youpin\Classes\Api
*/
class ApiRouter extends ControllerBase
{
public function __construct()
{
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods:*');
header('Access-Control-Allow-Headers:*');
header("Access-Control-Allow-Headers:DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type, Accept-Language, Origin, Accept-Encoding");
}
/**
* @var string Allows early access to page action.
*/
public static $action;
/**
* @var array Allows early access to page parameters.
*/
public static $params;
public function route($url = null)
{
//echo $url;exit;
$params = RouterHelper::segmentizeUrl($url);
/*
* Look for a Api controller
*/
$api = isset($params[0]) ? $params[0] : null;
if (is_null($api)) {
return $this->handle404Error('api not exist');
}
$api = Str::ucfirst($api);
self::$action = $action = isset($params[1]) ? $this->parseAction($params[1]) : null;
self::$params = $controllerParams = array_slice($params, 2);
$apiClass = 'Cloud\Rent\Fapi'."\\".$api."Api";
if (!class_exists($apiClass)) {
return $this->handle404Error('api path not exist');
} else {
$controllerObj = App::make($apiClass);
if ($controllerObj->actionExists($action)) {
return $controllerObj->handle($action, $controllerParams);
} else {
return $this->handle404Error('api command not exist');
}
}
}
public function broute($url = null)
{
//echo $url;exit;
$params = RouterHelper::segmentizeUrl($url);
/*
* Look for a Api controller
*/
$api = isset($params[0]) ? $params[0] : null;
if (is_null($api)) {
return $this->handle404Error('api not exist');
}
$api = Str::ucfirst($api);
self::$action = $action = isset($params[1]) ? $this->parseAction($params[1]) : null;
self::$params = $controllerParams = array_slice($params, 2);
$apiClass = 'Cloud\Rent\Bapi'."\\".$api."Api";
if (!class_exists($apiClass)) {
return $this->handle404Error('api path not exist');
} else {
$controllerObj = App::make($apiClass);
if ($controllerObj->actionExists($action)) {
return $controllerObj->handle($action, $controllerParams);
} else {
return $this->handle404Error('api command not exist');
}
}
}
public function handle404Error($msg) {
$data = [
'code' => ApiStatusCode::Not_Found,
'msg' => $msg,
];
return json_encode($data);
}
/**
* Process the action name, since dashes are not supported in PHP methods.
* @param string $actionName
* @return string
*/
protected function parseAction($actionName)
{
if (strpos($actionName, '-') !== false) {
return camel_case($actionName);
}
return $actionName;
}
}