1
votes

demande d'api de route laravel fonctionnant sans aucune restriction pour la méthode

Je suis un débutant dans le framework laravel, et pendant que je construis des routes API simples, j'ai rencontré un problème qui est: J'ai créé dans api.php

namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Validator;

class UserController extends Controller
{

public $successStatus = 200;
public $appNameToken = 'stiskAppNameToken';
/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
public function index()
{
    //

    $users = User::all();
    return response()->json(['data'=> $users],200);
}

/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create()
{
    //
}

/**
 * Store a newly created resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    //


    $rules = [
    'name' => 'required|min:4',
    'username' => 'required|min:4|unique:users',
    'email' => 'required|email|unique:users',
    'password' => 'required|min:4|confirmed',
    'status' => 'required',
    'dept_id' => 'required'

    ];

    $this->validate($request,$rules);

    $data = $request->all();
    $data['password'] = bcrypt($request->password);
    $data['verified'] = User::USER_VERIFIED;
    $data['verification_token'] = User::generateVerificationCode();

   $user = User::create($data);
   return response()->json(['data' => $user],201);
}

/**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function show($id)
{
    //
    $user = User::findOrFail($id);
    return response()->json(['data'=>$user],200);

}

/**
 * Show the form for editing the specified resource.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function edit($id)
{
    //
}

/**
 * Update the specified resource in storage.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function update(Request $request, $id)
{
    //
}

/**
 * Remove the specified resource from storage.
 *
 * @param  int  $id
 * @return \Illuminate\Http\Response
 */
public function destroy($id)
{
    //
}

}

Le contrôleur utilisateur a des méthodes API standard (index, store, show etc.) après cela, j'ai répertorié les itinéraires avec cette commande:

use Illuminate\Http\Request;
Route::resource('userss','User\UserController');

et j'ai obtenu les résultats comme dans l'image ci-dessous

 entrez la description de l'image ici

route/api.php

php artisan list:route

UserController.php

Route::resource('userss','User\UserController');

Mais le problème maintenant est à chaque fois que je fais une demande du facteur à mylocal.test / userss / avec différentes méthodes (PUT, POST, GET etc.) j'ai une liste des utilisateurs (méthodes d'index exécutées!)

quel est le problème? pourquoi toutes les requêtes de méthodes vont exécuter le corps de la méthode @index.

J'ai déjà géré MethodNotAllowedHttpException dans la fonction de rendu, mais aucun moyen

est supposé que Route :: resource ('users', 'User \ UserController'); gérer un tel problème? et acheminer ma demande vers une méthode correcte dans mon contrôleur?

Mise à jour: Le problème que je pense était dans le facteur ou mon serveur Web local Aussi après avoir utilisé l'authentification, vous ne rencontrerez pas ce problème merci pour vous tous


10 commentaires

tout ce que fait Route :: resource est d'enregistrer les routes que vous montrez, c'est tout


Avez-vous peut-être une route générique avant cette ressource qui attrape toutes les demandes et renvoie la liste des utilisateurs? Le partage du contenu web.php peut aider davantage. Et le code du contrôleur ne fera pas de mal d'être partagé :)


@Fadi Ramzi, voudriez-vous aussi montrer votre contrôleur?


veuillez vous montrer la fonction de stockage de UserController.


@lagbox oui je sais, mais je n'ai pas trouvé le problème :(


@WeeHong Certainement, je l'ai fait


@ fahim152 j'ai essayé de commenter le code de la méthode de magasin pour vérifier mais le problème persiste


À quoi ressemble réellement votre URL lorsque vous accédez via le facteur? [GET] / api / userss utilisera bien sûr l'index, mais [GET] / api / userss / 1 utilisera votre méthode show.


@FadiRamzi, j'ai essayé toute votre méthode. Tout fonctionne bien. Et n'a pas le problème que vous avez mentionné.


@WeeHong Oui, tous fonctionnent correctement, mais si vous essayez de faire la demande comme suit: method: put url: mylocal.test / userss, il obtient tous les utilisateurs, mais en fait, il devrait renvoyer la méthode mettre l'exception non autorisée également si je change demande de suppression ou une autre je reçois toujours la liste de tous les utilisateurs


3 Réponses :


0
votes

le problème ne vient pas de Route :: resource () car il ne fait que les enregistrer pour les méthodes, mais pour vérifier quand même essayez d'enregistrer le POST ou toute autre méthode manuellement.
ce que je pense que le problème serait le contrôleur, donc si vous pouviez partager le code du contrôleur que vous avez, ce serait utile.


1 commentaires

Salut Abdusalam, je l'ai partagé :)



0
votes

lorsque vous exécutez la requête GET avec postman à l'url mylocal.test / userss / vous obtiendrez tous les utilisateurs, car / userss est lié à l'index des fonctions du contrôleur, si vous voulez créer un utilisateur, vous devez utiliser / userss / create POST request , pour mettre à jour ussers / {user_id} méthode PUT ou PATCH et ainsi de suite. Dans la liste des itinéraires, vous pouvez voir clairement la méthode et le point de terminaison de l'itinéraire.

Bonne chance.


1 commentaires

Salut mon ami Mon problème ne concerne pas les moyens d'obtenir, de créer, de stocker, d'indexer, etc. mon problème est lorsque je crée une méthode de demande invalide comme méthode: supprimer, URL: mylocal.test / users / je devrais obtenir la méthode de suppression n'est pas autorisé 'mais ce qui se passe, c'est que je reçois toujours tous les utilisateurs sans aucune exception



1
votes

Il devrait avoir une api / devant l'URI si vous définissez correctement l'itinéraire dans api.php .

Voudriez-vous vérifier?

+--------+-----------+--------------------------+----------------+--------------------------------------------------+--------------+
| Domain | Method    | URI                      | Name           | Action                                           | Middleware   |
+--------+-----------+--------------------------+----------------+--------------------------------------------------+--------------+
|        | GET|HEAD  | /                        |                | Closure                                          | web          |
|        | GET|HEAD  | api/user                 |                | Closure                                          | api,auth:api |
|        | GET|HEAD  | api/userss               | userss.index   | App\Http\Controllers\User\UserController@index   | api          |
|        | POST      | api/userss               | userss.store   | App\Http\Controllers\User\UserController@store   | api          |
|        | GET|HEAD  | api/userss/create        | userss.create  | App\Http\Controllers\User\UserController@create  | api          |
|        | GET|HEAD  | api/userss/{userss}      | userss.show    | App\Http\Controllers\User\UserController@show    | api          |
|        | PUT|PATCH | api/userss/{userss}      | userss.update  | App\Http\Controllers\User\UserController@update  | api          |
|        | DELETE    | api/userss/{userss}      | userss.destroy | App\Http\Controllers\User\UserController@destroy | api          |
|        | GET|HEAD  | api/userss/{userss}/edit | userss.edit    | App\Http\Controllers\User\UserController@edit    | api          |
+--------+-----------+--------------------------+----------------+--------------------------------------------------+--------------+

J'ai cloné le contrôleur que vous avez posté mais tout fonctionne bien.
Veuillez vous référer à la capture d'écran ci-dessous.

 entrez la description de l'image ici

 entrez la description de l'image ici


2 commentaires

j'ai supprimé le middleware 'api' des URL de route


Le problème est que si j'essaie de faire une demande avec une méthode invalide, je devrais avoir une `` méthode non autorisée exception '' mais j'ai toujours la liste des utilisateurs lorsque, par exemple, choisissez la méthode put et l'url mylocal.test / userss, cette demande devrait être `` GET '' et non mettre, poster, supprimer etc ...