【发布时间】:2020-03-12 20:52:20
【问题描述】:
我是 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'); 处理这样的问题?
并将我的请求路由到控制器中的正确方法?
更新: 我认为问题出在邮递员或我的本地网络服务器中 同样在使用身份验证后,您将不会遇到此问题 谢谢大家
【问题讨论】:
-
所有
Route::resource所做的就是注册您正在显示的那些路线,仅此而已 -
你是否在这个资源之前有一个通配符路由来捕获所有请求并返回用户列表?分享
web.php内容可能会有所帮助。并且控制器代码不会被共享:) -
@Fadi Ramzi,请您也出示一下您的 Controller 吗?
-
请向您展示 UserController 的存储功能。
-
@lagbox 是的,我知道,但我找不到问题 :(