首页 > 解决方案 > 如何从 url 插入 id 到我的创建方法

问题描述

我正在尝试创建仅属于一个订单的产品。我随身携带的那个订单 ID 来创建表单,但不知道如何将其拉到存储功能中。更新文件:ProductController:

use Illuminate\Http\Request;
use App\Order;
use App\Product;
use Illuminate\Support\Facades\Route;

class ProductController extends Controller
{
    public function create(Order $order){
       
        return view('order.product-create', compact($order));
    }

    public function store(Order $order, Request $request){

   $this->validate($request, [
    'name'=>'required',
    'drawing'=>'nullable|file',
    '3d_file'=>'nullable|file',
    'quantity'=>'integer',
    'unit_price'=>'required',
    'discount'=>'nullable'
   ]);
   $order->products()->create($request->all());
   session()->flash('product-created', 'New product was added successfully');    
   return redirect()->route('order.view');
    }
}

路线:

Route::get('/order/{order}/product/create', 'ProductController@create')->name('product.create');
Route::post('/order/{order}/product', 'ProductController@store')->name('product.store');

view.blade.php ---> 链接到产品创建表单

<a href="{{route('product.create', $order)}}" class="btn btn-primary">Add new product</a>

product.create.blade.php ---> 片段到方法操作

action="{{route('product.store', ['order' => $order])}}"

所以目前,我无法进入 product-create.blade.php 错误 $order is undefined

标签: laravellaravel-7

解决方案


动态参数在您的路由文件中的大括号中定义为 routes/web.php 或 routes/api.php

// routes/web.php
Route::get('/order/{order}/product/create', 'ProductController@create')->name('product.create');
Route::post('/order/{order}/product', 'ProductController@store')->name('product.store');

使用 ProductController.php 中的 Route 模型绑定让 Laravel 将订单从容器中解析出来。

// ProductController.php
use App\Order;
use App\Product;
use Illuminate\Http\Request;

class ProductController extends Controller
{
    public function create(Order $order)
    {
        // Only get here if laravel resolves the $order model

        return view('order.product-create', compact('order'));
    }

    public function store(Order $order, Request $request)
    {
        // Only get here if laravel resolves the $order model

        //validation
        $this->validate($request, [
            'name'       => 'required',
            'drawing'    => 'nullable|file',
            '3d_file'    => 'nullable|file',
            'quantity'   => 'integer',
            'unit_price' => 'required',
            'discount'   => 'nullable'
        ]);

        // Create related Product model and associate it with the Order model.
        // https://laravel.com/docs/7.x/eloquent-relationships#the-create-method
        //
        // Need to allow for mass assignment in the Product.php model
        // https://laravel.com/docs/7.x/eloquent#mass-assignment
        $order->products()->create($request->all());

        // Flash to session and redirect after creating
        session()->flash('product-created', 'New product was added successfully');
        return redirect()->route('order.view');
    }
}

view.blade.php

<a href="{{route('product.create', ['order' => $order]))}}" class="btn btn-primary">Add new product</a>

product.create.blade.php

action="{{route('product.store', ['order' => $order])}}"

推荐阅读