测试我的路线时,我收到错误 404 在 Postman 上找不到

问题描述 投票:0回答:1

这是我的类别表迁移文件中包含的代码:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->id();
            $table->foreignId('parent_id')->nullable()->constrained('categories')->onDelete('cascade');
            $table->string('name');
            $table->string('icon')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('categories');
    }
};

这是我的 Category.php 模型文件中包含的代码:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
    use HasFactory;

    protected $fillable = ['parent_id', 'name', 'icon'];

    public function scopeParentCategories($query)
    {
        return $query->whereNull('parent_id');
    }

    public static function tree()
    {
        $allCategories = Category::get();
        $rootCategories = $allCategories->whereNull('parent_id');

        self::buildTree($rootCategories, $allCategories);
        
        return $rootCategories;
    }

    public function children()
    {
        return $this->hasMany(Category::class, 'parent_id');
    }

    public function items()
    {
        return $this->belongsToMany(Item::class, 'category_items');
    }

    public function saveSubCategories($subCategories)
    {
        foreach($subCategories as $subCategory) {
            $this->saveSubCategory($subCategory);
        }
    }

    public function saveSubCategory($subCategory)
    {
        $newSubCategory = new self();
        $newSubCategory->fill($subCategory);
        $newSubCategory->setAttribute('parent_id', $this->id);
        $newSubCategory->save();
    }

    private static function formatTree($categories, $allCategories)
    {
        foreach ($categories as $category) {
            $category->children = $allCategories->where('parent_id', $category->id)->values();

            if ($category->children->isNotEmpty()) {
                self::formatTree($category->children, $allCategories);
            }
        }
    }
}

这是我的 CategoryController.php 控制器文件中包含的代码:

<?php

namespace App\Http\Controllers;

use App\Models\Category;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class CategoryController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        return Category::all();
    }

    /**
     * Show the form for creating a new resource.
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required|string|max:255',
            'icon' => 'nullable|string|max:255',
            'children.*.name' => 'required|string|max:255',
            'children.*.icon' => 'required|string|max:255',
            'children.*.parent_id' => 'nullable|exists:categories,id',
        ]);

        if ($validator->fails()) {
            return response()->json(['errors' => $validator->errors()], 400);
        }

        $category = Category::create($request->only('name', 'icon'));

        if ($request->has('children')) {
            foreach ($request->children as $childData) {
                $child = new Category($childData);
                $child->parent_id = $category->id;
                $child->save();
            }
        }

        return $category;
    }

    /**
     * Display the specified resource.
     */
    public function show(Category $category)
    {
        return Category::find($category);
    }

    /**
     * Show the form for editing the specified resource.
     */
    public function edit(Category $category)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, Category $category)
    {
        $category = Category::findOrFail($category);

        $validator = Validator::make($request->all(), [
            'name' => 'required|string|max:255',
            'parent_id' => 'nullable|exists:categories,id',
            'icon' => 'nullable|string|max:255',
        ]);

        if ($validator->fails()) {
            return response()->json(['errors' => $validator->errors()], 400);
        }

        $category->update($request->all());

        return response()->json($category);
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(Category $category)
    {
        $category = Category::findOrFail($category);
        $category->delete();
        
        return response()->json($category);
    }
}

这是我的 api.php 路由文件中包含的代码:

<?php

/*
|--------------------------------------------------------------------------
| 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!
|
*/

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\CategoryController;
use App\Http\Controllers\ItemController;
use App\Http\Controllers\ItemOptionController;
use App\Http\Controllers\OptionController;
use App\Http\Controllers\OptionValueController;
use App\Http\Controllers\OrderController;
use App\Http\Controllers\OrderItemController;
use App\Http\Controllers\PaymentController;
use App\Http\Controllers\QRCodeController;
use App\Http\Controllers\TableLayoutController;

// API version prefix
Route::prefix('v1')->group(function () {

    // Routes for managing categories
    Route::get('categories', [CategoryController::class, 'index']);
    Route::post('categories', [CategoryController::class, 'store']);
    Route::get('categories/{category}', [CategoryController::class, 'show']);
    Route::put('categories/{category}', [CategoryController::class, 'update']);
    Route::delete('categories/{category}', [CategoryController::class, 'destroy']);

    // Routes for managing items
    Route::get('items', [ItemController::class, 'index']);
    Route::post('items', [ItemController::class, 'store']);
    Route::get('items/{item}', [ItemController::class, 'show']);
    Route::put('items/{item}', [ItemController::class, 'update']);
    Route::delete('items/{item}', [ItemController::class, 'destroy']);

    // Routes for managing orders
    Route::get('orders', [OrderController::class, 'index']);
    Route::post('orders', [OrderController::class, 'store']);
    Route::get('orders/{order}', [OrderController::class, 'show']);
    Route::put('orders/{order}', [OrderController::class, 'update']);
    Route::delete('orders/{order}', [OrderController::class, 'destroy']);

    // Routes for managing payments
    Route::get('payments', [PaymentController::class, 'index']);
    Route::post('payments', [PaymentController::class, 'store']);
    Route::get('payments/{payment}', [PaymentController::class, 'show']);
    Route::put('payments/{payment}', [PaymentController::class, 'update']);
    Route::delete('payments/{payment}', [PaymentController::class, 'destroy']);

    // Routes for managing options
    Route::get('options', [OptionController::class, 'index']);
    Route::post('options', [OptionController::class, 'store']);
    Route::get('options/{option}', [OptionController::class, 'show']);
    Route::put('options/{option}', [OptionController::class, 'update']);
    Route::delete('options/{option}', [OptionController::class, 'destroy']);

    // Routes for managing option values
    Route::get('option-values', [OptionValueController::class, 'index']);
    Route::post('option-values', [OptionValueController::class, 'store']);
    Route::get('option-values/{optionvalues}', [OptionValueController::class, 'show']);
    Route::put('option-values/{optionvalues}', [OptionValueController::class, 'update']);
    Route::delete('option-values/{optionvalues}', [OptionValueController::class, 'destroy']);

    // Routes for managing item options
    Route::get('item-options', [ItemOptionController::class, 'index']);
    Route::post('item-options', [ItemOptionController::class, 'store']);
    Route::get('item-options/{itemoptions}', [ItemOptionController::class, 'show']);
    Route::put('item-options/{itemoptions}', [ItemOptionController::class, 'update']);
    Route::delete('item-options/{itemoptions}', [ItemOptionController::class, 'destroy']);
    
    // Routes for managing order items
    Route::get('order-items', [OrderItemController::class, 'index']);
    Route::post('order-items', [OrderItemController::class, 'store']);
    Route::get('order-items/{orderItem}', [OrderItemController::class, 'show']);
    Route::put('order-items/{orderItem}', [OrderItemController::class, 'update']);
    Route::delete('order-items/{orderItem}', [OrderItemController::class, 'destroy']);

    // Routes for managing QR codes
    Route::get('qr-codes', [QRCodeController::class, 'index']);
    Route::post('qr-codes', [QRCodeController::class, 'store']);
    Route::get('qr-codes/{qrCode}', [QRCodeController::class, 'show']);
    Route::put('qr-codes/{qrCode}', [QRCodeController::class, 'update']);
    Route::delete('qr-codes/{qrCode}', [QRCodeController::class, 'destroy']);

    // Routes for managing table layouts
    Route::get('table-layouts', [TableLayoutController::class, 'index']);
    Route::post('table-layouts', [TableLayoutController::class, 'store']);
    Route::get('table-layouts/{tableLayout}', [TableLayoutController::class, 'show']);
    Route::put('table-layouts/{tableLayout}', [TableLayoutController::class, 'update']);
    Route::delete('table-layouts/{tableLayout}', [TableLayoutController::class, 'destroy']);

});

我正在使用 Postman 来测试我的 Laravel 应用程序后端。我正在 docker 上运行我的数据库。所有路线均无效,但我在此处显示类别作为参考。我尝试运行 post 方法但失败了

This is what I get when I run the Get Method on Postman. I havent been able to figure out why.

php laravel api routes postman
1个回答
0
投票

愚蠢的错误:

必须在 bootstrap->cache->app.php 中提及基本路径

<?php

use Illuminate\Foundation\Application; use Illuminate\Foundation\Configuration\Exceptions; use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',

        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        //
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();
© www.soinside.com 2019 - 2024. All rights reserved.