【发布时间】:2022-01-24 14:28:21
【问题描述】:
我正在使用 laravel rest api。我在 UserController 的资源路由中仅找到 post 方法的错误。但所有用户都显示在索引方法中并更新用户,并显示特定用户工作良好。我该如何解决这个问题。
这是用户控制器的路由文件
<?php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\User\UserController;
use App\Http\controllers\Buyer\BuyerController;
use App\Http\controllers\Seller\SellerController;
use App\Http\Controllers\Category\CategoryController;
use App\Http\Controllers\Product\ProductController;
use App\Http\Controllers\Transaction\TransactionController;
use App\Http\Controllers\Transaction\TransactionCategoryController;
use App\Http\Controllers\Transaction\TransactionSellerController;
use App\Http\controllers\Buyer\BuyerTransactionController;
use App\Http\Controllers\Buyer\BuyerProductController;
use App\Http\Controllers\Buyer\BuyerSellerController;
use App\Http\controllers\Buyer\BuyerCategoryController;
use App\Http\Controllers\Category\CategoryProductController;
use App\Http\Controllers\Category\CategorySellerController;
use App\Http\Controllers\Category\CategoryTransactionController;
use App\Http\Controllers\Category\CategoryBuyerController;
use App\Http\Controllers\Seller\SellerTransactionController;
use App\Http\Controllers\Seller\SellerCategoryController;
use App\Http\Controllers\Seller\SellerBuyerController;
use App\Http\Controllers\Seller\SellerProductController;
use App\Http\Controllers\Product\ProductTransactionController;
use App\Http\Controllers\Product\ProductBuyerController;
use App\Http\Controllers\Product\ProductCategoryController;
use App\Http\Controllers\Product\ProductBuyerTransactionController;
/*
|--------------------------------------------------------------------------
| 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::middleware('auth:sanctum')->get('/user', function (Request $request) {
// return $request->user();
// });
Route::resource('category', CategoryController::class)->except(['create', 'edit']);
Route::resource('products', ProductController::class)->only(['index', 'show']);
Route::resource('sellers', SellerController::class)->only(['index', 'show']);
Route::resource('buyers', BuyerController::class)->only(['index', 'show']);
Route::resource('transactions', TransactionController::class)->only(['index', 'show']);
Route::resource('users', UserController::class)->except(['create', 'edit']);
Route::resource('transactions.category', TransactionCategoryController::class)->only('index');
Route::resource('transactions.sellers', TransactionSellerController::class)->only('index');
Route::resource('buyers.transactions', BuyerTransactionController::class)->only('index');
Route::resource('buyers.products', BuyerProductController::class)->only('index');
Route::resource('buyers.sellers', BuyerSellerController::class)->only('index');
Route::resource('buyers.category', BuyerCategoryController::class)->only('index');
Route::resource('category.products', CategoryProductController::class)->only('index');
Route::resource('category.sellers', CategorySellerController::class)->only('index');
Route::resource('category.transactions', CategoryTransactionController::class)->only('index');
Route::resource('category.buyers', CategoryBuyerController::class)->only('index');
Route::resource('sellers.transactions', SellerTransactionController::class)->only('index');
Route::resource('sellers.category', SellerCategoryController::class)->only('index');
Route::resource('sellers.buyers', SellerBuyerController::class)->only('index');
Route::resource('sellers.products', SellerProductController::class);
Route::resource('products.transactions', ProductTransactionController::class)->only('index');
Route::resource('products.buyers', ProductBuyerController::class)->only('index');
Route::resource('products.category', ProductCategoryController::class)->only(['index', 'update', 'destroy']);
// Route::put('products/{product}/category/{category}', [ProductCategoryController::class, 'update']);
Route::resource('products.buyers.transactions', ProductBuyerTransactionController::class)->only('store');
Route::fallback( function(){
return response()->json([
'message' => 'Page is not found'], 404);
});
Route::get('verify/{token}', [UserController::class, 'verifyEmail'])->name('verify');
还有这个用于存储方法的 UserController
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\ApiController;
use Illuminate\Http\Request;
use App\Models\User;
class UserController extends ApiController
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$user = User::all();
return $this->showAll($user);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
$request->validate([
'name' => 'required',
'email' => 'required|email|unique:users',
'password' => 'required|min:6|confirmed',
]);
$user = new User();
$user->name = $request->name;
$user->email = $request->email;
$user->password = $request->password;
$user->password = bcrypt($request->password);
$user->verified = User::UNVERIFIED_USER;
$user->verification_token = User::getVerificationToken();
$user->admin = User::REGULER_USER;
$user->save();
Mail::to($user->email)->send(new VerificationEmail($user));
return $this->showOne($user);
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show(User $user)
{
//
return $this->showOne($user);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, User $user)
{
//enter code here
$request->validate([
'email' => 'email|unique:users,email,'. $user->id,
'password' => 'min:6|confirmed',`enter code here`
'admin' => 'in:'. User::ADMIN_USER . ',' . User::REGULER_USER,
]);
if($request->has('name')){
$user->name = $request->name;
}
if($request->has('email') && $user->email != $request->email) {
$user->verified = User::UNVERIFIED_USER;
$user->verification_token = User::getVerificationToken();
$user->email = $request->email;
}
if($request->has('password')){
$user->password = bcrypt($request->password);
}
if($request->has('admin')) {
if(!$user->isVeified()) {
return $this->errorResponse('only verified user can modified admin rolle', 409);
}
$user->admin = $request->admin;
}
if(!$user->isDirty()) {
return response()->json('You need to specify which feild you want to update', 422);
}
$user->save();
return $this->showOne($user);
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy(User $user)
{
$user->delete();
return $this->showOne($user);
}
// public function verifyEmail(User $user)
// {
// //Mail::to($user->email)
// }
}
【问题讨论】:
-
运行
php artisan route:list时会出现路由吗? -
是的 users.store 在我运行此命令时出现
-
如果
POST路由出现在users.store的路由列表中,则它已正确注册。你能提供你在尝试POST到users.store时得到的确切错误消息吗? -
它返回 NotFoundHttpException 异常。我为此异常返回一条消息
标签: laravel