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