我正在使用 Laravel 10 开发一个 Rest API 项目,尽管已经为端点(/dp 和 /dj)正确配置了 Laravel API 路由,但对这两个端点的 POST 请求意外地执行了 Web 路由,而不是预期的 api.php路线。奇怪的是,除了这两个端点(/dp 和 /dj)的 POST 之外的所有方法以及其他端点中的其他 POST 都可以正常运行。因此,例如,如果我点击这两个端点(/dp 和 /dj)的 put、get 或 delete 方法,它会按预期工作,但不会是 POST 方法。如果我在 web.php 中删除该路由,它会返回“404 未找到”。
Api.php 路由
<?php
Route::group(['namespace' => 'App\Http\Controllers', 'middleware' => 'auth:sanctum'],function () {
Route::apiResource('users', UserController::class)->middleware(['auth','verified','role:admin']);
Route::apiResource('mous', MouController::class)->middleware(['auth','verified','role:admin|nasabah|banker']);
Route::apiResource('office', OfficeController::class)->middleware(['auth','verified','role:admin']);
Route::apiResource('jdp', JDPController::class)->middleware(['auth','verified','role:admin|nasabah|banker']);
Route::apiResource('dp', DPController::class)->middleware(['auth','verified','role:admin|nasabah']);
Route::apiResource('jdj', JDJController::class)->middleware(['auth','verified','role:admin|nasabah']);
Route::apiResource('dj', DJController::class)->middleware(['auth','verified','role:admin|nasabah']);
});
网络路线
Route::get('/', function () {
return view('welcome');
});
DP 控制器(/dp 和 /dj 逻辑相似,所以我只展示其中之一)
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\DokumenPribadi;
use App\Http\Resources\DPResource;
use Illuminate\Support\Facades\Auth;
use App\Http\Requests\StoreDPRequest;
use App\Http\Resources\DPCollection;
use App\Models\JenisDokumenPribadi;
use Illuminate\Auth\Access\AuthorizationException;
use Illuminate\Http\Response;
class DPController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
return new DPCollection(DokumenPribadi::paginate(5));
}
/**
* Store a newly created resource in storage.
*/
public function store(StoreDPRequest $request)
{
try {
$jdpID = $request->input('id_jenis_dokumen_pribadi');
$jdp = $jdpID ? JenisDokumenPribadi::findOrFail($jdpID) : null;
if (!$jdp) {
return response()->json(['error' => 'Jenis dokumen pribadi not found'], Response::HTTP_NOT_FOUND);
}
$dpData = $request->validated();
$dpData['jenis'] = $jdp->nama;
$dpData['created_by'] = Auth::id();
$dp = DokumenPribadi::create($dpData);
return response()->json($dp, Response::HTTP_CREATED);
} catch (AuthorizationException $e) {
return response()->json(['error' => 'Forbidden'], Response::HTTP_FORBIDDEN);
}
}
/**
* Display the specified resource.
*/
public function show(DokumenPribadi $dp)
{
return new DPResource($dp);
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, DokumenPribadi $dp)
{
try {
$data = $request->all();
$data['updated_by'] = Auth::id();
$dp->update($data);
$updatedDP = new DPResource($dp->fresh());
return response()->json([
'message' => 'Data Berhasil Terupdate',
'data' => $updatedDP
]);
} catch (\Exception $e) {
return response()->json([
'error' => 'Terjadi kesalahan saat memperbarui data: ' . $e->getMessage()
], 400);
}
}
/**
* Remove the specified resource from storage.
*/
public function destroy(DokumenPribadi $dp)
{
try {
$dp->delete();
return response()->json(['message' => 'Data successfully deleted'], 200);
} catch (\Exception $e) {
return response()->json(['error' => 'Failed to delete data: ' . $e->getMessage()], 500);
}
}
}
当我尝试点击(/dj 或 /dp)端点时:
奇怪的是它返回welcome.blade.php的视图
如果我删除 web.php 上的该路由,它会返回:
它也存在于路线列表中: