Laravel Отдельные папки для веб-контроллеров и контроллеров API, вызывающие ошибку - PullRequest
1 голос
/ 29 февраля 2020

Я сейчас пытаюсь создать API для моего laravel проекта,

Я решил переместить свои контроллеры API в подпапку Controllers. Это структура папок: Folder Structure

Это файл маршрутов для 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');
});

И это 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);
    }

}

Когда я отправляю запрос GET на /api/v1/event_locations, я получаю следующую ошибку

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

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

Вам также необходимо объявить пространство имен в группе маршрутов.

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

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

вы задали EventLocations во множественном числе, а имя контроллера - единственное число EventLocation изменить имя контроллера на EventLocationAPIController в файле маршрута.

0 голосов
/ 29 февраля 2020

Вы должны объявить свое пространство имен в группе маршрутизатора следующим образом:

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

Проверьте Laravel документы для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...