Search code examples
phplaravelapiroutesdingo-api

Dingo Api registering in RouteServiceProvider


I've read that it's possible to specify namespace for Dingo in that way

$api = app('Dingo\Api\Routing\Router');

$api->version('v1', ['namespace' => 'App\Http\Controllers'], function ($api) {
   $api->get('sites', 'SiteController@index');
   $api->get('sites/{site}', 'SiteController@show');
   $api->post('sites', 'SiteController@store');
   $api->put('sites/{site}', 'SiteController@update');
   $api->delete('sites/{site}', 'SiteController@delete');
});

However, I've got multiple files with API routes so that I don't want to mess it with namespace and would like to specify namespace in Laravel way like that

protected function mapDingoApiRoutes() {
        Route::group([
            'middleware' => 'api',
            'namespace' => $this->namespace,
        ], function ($api) {
            require base_path('routes/api/sites.api.php');
            require base_path('routes/api/skills.api.php');
            require base_path('routes/api/socials.api.php');
        });
    }

However it turned out that Dingo doesn't see this namespace declaration and I'm not able to make something like $api->group()


Solution

  • Solved that way

    ...
    use Dingo\Api\Routing\Router;
    
    class RouteServiceProvider extends ServiceProvider
    {
    ...
    
    public function map()
        {
            $this->mapDingoApiRoutes(app('Dingo\Api\Routing\Router'));
    
            $this->mapWebRoutes();
        }
    
    protected function mapDingoApiRoutes(Router $api) {
            $api->group([
                'version' => 1,
                'middleware' => 'api',
                'namespace' => $this->namespace,
            ], function ($api) {
                require base_path('routes/api/sites.api.php');
                require base_path('routes/api/skills.api.php');
                require base_path('routes/api/socials.api.php');
            });
        }
    
    ...
    }