首页 > 解决方案 > laravel route api请求工作没有任何方法限制

问题描述

我是 laravel 框架的初学者,在构建简单的 api 路由时遇到了一个问题:我在 api.php 中创建

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

用户控制器具有标准 api 方法(索引、存储、显示等),之后我使用以下命令列出了路由:

php artisan list:route

我得到了如下图所示的结果

在此处输入图像描述

路由/api.php

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

用户控制器.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)
{
    //
}

}

但现在的问题是每次我从邮递员发出请求时mylocal.test/userss/ 使用不同的方法(PUT、POST、GET 等)我得到了一个用户列表(执行了索引方法!)

问题是什么?为什么所有方法请求都将执行@index 方法体。

我已经MethodNotAllowedHttpException在渲染功能中处理过,但没办法

假设 Route::resource('userss','User\UserController');处理这样的问题?并将我的请求路由到控制器中的正确方法?

更新:我认为问题出在邮递员或我的本地网络服务器中 同样在使用身份验证后,您将不会遇到这个问题,谢谢大家

标签: phplaravelpostman

解决方案


api/如果您api.php正确定义了路由,它应该在 URI 前面有一个。

请你再检查一遍好吗?

+--------+-----------+--------------------------+----------------+--------------------------------------------------+--------------+
| 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          |
+--------+-----------+--------------------------+----------------+--------------------------------------------------+--------------+

我克隆了您发布的控制器,但一切正常。
请参阅下面的屏幕截图。

在此处输入图像描述

在此处输入图像描述


推荐阅读