wtreston
wtreston

Reputation: 1061

Laravel Seperate folders for Web and API Controllers causing error

Im currently trying to create an API for my laravel project,

I have decided to move my API controllers into a subfolder of Controllers. This is the folder structure: Folder Structure

This is the routes file for the api:

<?php

use Illuminate\Http\Request;
use app\Http\Controllers\APIControllers;
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

Route::group(['prefix' => 'v1'], function() {

    Route::get('/event_locations', 'EventLocationsAPIController@all');
});

And this is the EventLocationsAPIController:

<?php

namespace App\Http\Controllers\APIControllers;

use App\EventLocation;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class EventLocationAPIController extends Controller
{

    public function all()
    {
        $locations = EventLocation::all();

        return response()->json($locations);
    }

}

When I send an GET request to /api/v1/event_locations I get the following error

Target class [App\Http\Controllers\EventLocationsAPIController] does not exist.

Any help would be appreciated!

Upvotes: 1

Views: 756

Answers (2)

Hafez Divandari
Hafez Divandari

Reputation: 9029

You have to declare your nameaspace on router's group like this:

Route::namespace('APIControllers')->group(function () {
    // Controllers Within The "App\Http\Controllers\APIControllers" Namespace
    Route::group(['prefix' => 'v1'], function() {
        Route::get('/event_locations', 'EventLocationAPIController@all');
    });
});

Check Laravel docs for more info.

Upvotes: 0

Dilip Hirapara
Dilip Hirapara

Reputation: 15296

You need to declare the namespace in route group as well.

Route::group(['prefix' => 'v1','namespace'=>'APIControllers'], function() {

    Route::get('/event_locations', 'EventLocationAPIController@all');
});

you have given EventLocations plural and the controller name is singular EventLocation change the name of the controller as EventLocationAPIController in the route file.

Upvotes: 1

Related Questions