【问题标题】:laravel Resource route shows not found error only for post methodlaravel 资源路由仅针对 post 方法显示未找到错误
【发布时间】: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 的路由列表中,则它已正确注册。你能提供你在尝试POSTusers.store 时得到的确切错误消息吗?
  • 它返回 NotFoundHttpException 异常。我为此异常返回一条消息

标签: laravel


【解决方案1】:

感谢所有尝试支持我的人。最后我解决了这个问题。这是发生的。因为我没有在邮递员头中传递Accept: Application/json。这就是为什么找不到它的返回 404,没有显示实际的$request-&gt;validate() 错误消息。

【讨论】:

    【解决方案2】:

    Laravel 资源 make show 方法仅用于获取请求 如果您需要工作,还可以发布方法进行另一个路线定义 喜欢

    Route::post('users/{user}', [UserController::class, 'show'])->name('users.show');
    

    【讨论】:

    • 我要求存储用户数据的存储方法不起作用,它的端点是用户,http 请求是 post
    猜你喜欢
    • 2019-02-20
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 2015-02-04
    • 2014-10-02
    • 2018-01-06
    相关资源
    最近更新 更多