laravel - 如何从 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
解决方案
动态参数在您的路由文件中的大括号中定义为 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])}}"
推荐阅读
- android - 从另一个活动使用 SharedPreferences 在 ArrayListAdapter 中添加项目
- r - 在 R- 对于所有为 TRUE 的值,是同一行,前一列也为 TRUE?
- php - 如何在 PHP 中使用 cmd 命令调用 go-code?
- java - 无法在 Java 中的日志中获取严重异常 - Eclipse 和 Netbeans 中的输出不同
- mouse-cursor - 是否不再使用“蒙版颜色”类型的光标?
- swift - 在 ForEach/ZStack (SwiftUI) 中将表达式分解为不同的子表达式
- google-colaboratory - 从 colab 本地下载文件的代码
- javascript - 如何过滤只有数字的简单多维数组
- vue.js - 如何使用 axios 和 vuejs 删除登录路由上的授权
- mongodb - 将 MongoDB Atlas 连接到 Galaxy 时 MONGO_URL 的格式