2
votes

Comment appeler un contrôleur Api à partir d'une route API dans Laravel?

J'ai installé l'authentification jwt et j'ai créé un contrôleur à savoir, AuthController Inside Api Directory. J'ai défini le dans routes / api.php comme:

Route::prefix('api')
    // ->middleware('api')
    // ->namespace($this->namespace) ->group(base_path('routes/api.php'));

Lorsque je frappe l'url comme: http: // localhost: 8000 / api / v1 / test, j'obtiens une erreur car la classe Cotrollers \ Api \ AuthController n'existe pas.

AuthController

<?php

namespace App\Http\Controllers;

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

class AuthController extends Controller
{


    public function test() {
        return "Hello";
    }
}

RouteServiceProvider.php:

Route::group(['prefix'=>'v1', 'namespace' => 'Api'],function($app){
    Route::get('/test', function(){
        return "HEllo";
    });
    Route::get('test',              'AuthController@test');
});


0 commentaires

4 Réponses :


1
votes

Dans votre instruction Route::group , vous avez défini l'espace de noms du groupe de routes comme 'Api' .

Mais l'AuthController réside dans l'espace de noms App\Http\Controllers , et non dans l'espace de noms Api .

Pour résoudre ce problème, ajoutez un espace de noms Api dans votre App\Http\Controllers et faites-y référence (la meilleure pratique consiste à créer un répertoire dans le répertoire Controllers nommé Api afin que la structure des répertoires suive l'espace de noms ):

AuthController.php

namespace App\Http\Controllers\Api;

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

class AuthController extends Controller
{
    public function test() {
        return "Hello";
    }
}


2 commentaires

Maintenant, j'obtiens une erreur de classe Api \ AuthController n'existe pas


Essayez d'exécuter composer dump-autoload pour mettre à jour la référence de classe dans le chargeur automatique de compositeur



0
votes

Modifiez la définition de l'espace de noms du contrôleur Auth en:

namespace App\Http\Controllers\Api;


1 commentaires

n'a aucun effet, obtenir la même erreur de classe Api \ AuthController n'existe pas



3
votes

Décommentez la ligne ->namespace($this->namespace) .


3 commentaires

Route :: prefix ('api') // -> middleware ('api') // -> namespace ($ this-> namespace) -> group (base_path ('routes / api.php'));


Oui. Veuillez un commenter la ligne "-> namespace" et vérifier.


J'ai rangé la question pour inclure votre php et la réponse pour inclure la réponse. À l'avenir, vous ne devriez pas publier de réponses demandant des éclaircissements, car cela rend la tâche très difficile à suivre et les informations nécessaires ne sont pas dans la question elle-même - ce qui rend plus difficile pour les autres d'aider le PO.



0
votes

Ici, vous devez apporter des modifications à,

protected $namespace = 'App\Http\Controllers';

Dans le RouteServiceProvider.php, ajoutez

protected $namespace = 'Path\To\Controllers';

Comme:

App\Providers\RouteServiceProvider.php

C'est ça! Veuillez me faire savoir si cela a résolu votre problème.


0 commentaires