Slim Framework 3 - 在另一个Slim API中创建API或从不同路由共享路由?

时间:2016-08-17 20:31:16

标签: php slim

我从头开始研究基于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?' .....

0 个答案:

没有答案