Home > Software design >  laravel Resource route shows not found error only for post method
laravel Resource route shows not found error only for post method

Time:01-24

i am working with laravel rest api. i get not found error for only post method in a resource route for UserController.bute all user show in a index method and update user, and show a specific user working good.how can i fixed this problem.

this is route file for UserController

<?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');

And this UserController for store method

<?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)
    // }
}

CodePudding user response:

Thank you everyone who try to support me.Finally i fixed this issue. This is happend.Beacuse i did not pass Accept: Application/json in postman header.thats why its return 404 not found, not showing the actual $request->validate() error message.

CodePudding user response:

Laravel resource make show method only for get requests if you need work also post method make another route definition like

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