0
votes

I have setup Laravel 6 project but for some reason when php artisan route:list returns “Target class [App\Sys\Http\Controllers\Api\LocationController] does not exist." I'm new in Laravel and I can't understand why the controller doesn't work. Can anyone please help me?

Here are my code:

LocationController.php

<?php
namespace App\Http\Controllers\Api;

//use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Location;

class LocationController extends Controller
{

    public function index(Request $request)
    {  
        $per_page = $request->per_page ? $request->per_page : 5;
        $sort_by = $request->sort_by;
        $order_by = $request->order_by;
        return response()->json(['locations' => Location::orderBy($sort_by, $order_by)->paginate($per_page)],200);
    }

    public function store(Request $request)
    {
        $location= Location::create([
            'code' =>$request->code,
            'name' =>$request->name,
            'description' =>$request->description
        ]);
        return response()->json(['location'=>$location],200);
    }


    public function show($id)                                                                                                                                                           
    {
        $locations = Location::where('code','LIKE', "%$id%")->orWhere('name','LIKE', "%$id%")->orWhere('description', 'LIKE', "%$id%")->paginate();
        return response()->json(['locations' => $locations],200);
    }



    public function update(Request $request, $id)
    {
       $location = Location::find($id);
       $location->code  = $request->code;
       $location->name  = $request->name;
       $location->description  = $request->description;
       $location->save(); 
       return response()->json(['location'=>$location], 200);
    }

    public function destroy($id)
    {
        $location = Location::where('id', $id)->delete();
        return  response()->json(['location'=>$location],200);
    }

    public function deleteAll(Request $request){
        Location::whereIn('id', $request->locations)->delete();
        return response()->json(['message', 'Records Deleted Successfully'], 200);
    }
}

My route file:

api.php

<?php

use Illuminate\Http\Request;



Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Route::namespace('App\Sys\Http\Controllers')->group(function () {
    Route::get('/menuslevel0',['uses' => 'MenuController@menus_level_0']);

    Route::resource('locations','Api\LocationController');
});
2
have you created the Sys folderkunal rajput
App\Sys\Http\Controllers (route) is not the same as App\Http\Controllers (namespace)brombeer
you have to change the namespace from namespace App\Http\Controllers\Api; to [App\Sys\Http\Controllers\Api\;kunal rajput
@kunalrajput Thanks.....It is working now I have missed Sys folder.kinley om

2 Answers

2
votes

You controller is in the App\Http\Controllers\Api, not in the App\Sys\Http\Controllers namespace. Remove the locations resource route in the namespace App\Sys\Http\Controllers group and create a new one.

Do this

...

Route::namespace('App\Sys\Http\Controllers')->group(function () {
    Route::get('/menuslevel0',['uses' => 'MenuController@menus_level_0']);
});

Route::namespace('App\Http\Controllers')->group(function () {
    Route::resource('locations','Api\LocationController');
});

...
1
votes

Your controller is in App\Http\Controllers\Api and your route is pointing to App\Sys\Http\Controllers\Api.

You must change:

Route::namespace('App\Sys\Http\Controllers')->group(function () {
    // Your routes
});

To:

Route::namespace('App\Http\Controllers')->group(function () {
    // Your routes
});