我从头开始研究基于API的系统,并且我使用的是Slim 3.0。
我希望有不同的类来实现\ Slim \ App作为其中的一部分,以分离不同API的逻辑,但它具有API休息中任何类的任何路由的唯一访问点
为了实现这一点,我创建了一个基本API类,它将\ Slim \ App对象作为其中的一部分来处理。此外,我创建了几个从基类继承的API类。接下来是名为" ApiRest"。
的基类use Slim\App as ApiSlim;
class ApiRest
{
protected $app;
protected $actualConfiguration;
protected $middlewares;
public function __construct($config = [], $policies=[])
{
// ..... previous configuration
$this->app = new ApiSlim($this->actualConfiguration);
}//end __construct()
public function run($silent = false) {
$this->app->run($silent);
}
public function getAllRoutes()
{
// Slim/Router
return $this->app->getContainer()->get('router')->getRoutes();
}
public function getApp()
{
return $this->app;
}
}//end class
然后,其中一个子课是下一个:
class ChildApiRest extends ApiRest{
public function __construct() {
parent::__construct([], 'auth');
$this->app->get('hello/{name}', function (Request $request, Response $response) {
$name = $request->getAttribute('name');
$response->getBody()->write("Hello, $name");
//return $response;
});
}
}
所以,唯一的接入点,只需说" api.php"文件,是下一个:
$globalRouter = new \Slim\App();
$globalRouter->group('/services/', function () use($globalRouter){
$this->group('oneService/', function () use($globalRouter){
// At this point I want to "publish" the routes of the specified API
$apiChild = new ChildApiRest();
$apiChild->run();
});
});
$globalRouter->run();
我希望添加与我拥有的子API一样多的组。有了这些,我将路由分开以实现功能,但仍然可以从一个单点访问(但它不起作用)。
最后,当我试图访问"你好" api througth这个 " http://myserver/api.php/services/oneService/hello/world",Slim响应404错误,以及下一个致命错误
我收到此错误:
Fatal error: Uncaught exception 'RuntimeException' with message
'Unexpected data in output buffer.
Maybe you have characters before an opening <?php tag?' .....