【发布时间】:2021-01-30 22:03:12
【问题描述】:
我想提交一个表单,一旦按下提交按钮,我就会运行一些代码。 在这段“代码”中,它的部分工作将是创建一个学生,并创建一个午餐订单。 (从表单中提取的信息)。
根据我一直在阅读的内容,我的目标应该是使用 CRUD,这意味着我应该有一个学生控制器和一个午餐订单控制器。
我想在每个控制器中调用@store 方法。
如果我以“糟糕”的方式执行此操作,则表单将具有 [action="/students" method=POST]。然后在那个路由中,它会调用 /lunchorder/ POST,然后返回一个页面(redirect('students'))。
但是,如上所述,我不想从控制器调用控制器。因此,最初的 [action="/students" method=POST] 应该是别的东西,然后这个新实体将调用 StudentController,然后调用 LunchOrderController,然后再重定向('students')。
但是,我不知道这个新实体是什么,或者应该是什么,或者如何链接到它。
这只是通往新控制器的新路由,可以从中调用其他控制器吗? 还是我应该将表单数据发送到其他地方(也许是模型?),让他们调用控制器?还是我离基地太远了,需要退后一步?
我对 Laravel 还很陌生,但我想尽可能地使用最佳实践。我对其他帖子的所有阅读似乎都不足以解释它的工作原理。
编辑:一些代码可以让我了解我的意思。
Student_edit.blade.php
<form action="/student" method="POST">
{{ csrf_field() }}
<label>First Name</label><input name="firstname" value="">
<label>Last Name</label><input name="lastname" value="">
<label>Lunch Order</label>
<select name="lunch_value" id="">
<option value="1" >Meat Pie</option>
<option value="2" >Sandwich</option>
<option value="3" >Salad</option>
<option value="4" >Pizza</option>
</select>
<input type="submit" value="Submit" class="btn btn-primary btn-lg">
</form>
web.php
Route::resource('/students', 'StudentController');
Route::resource('/lunchorder', 'LunchOrderController');
学生管理员
public function store(Request $request)
{
Student::create(request(['firstname', 'lastname']));
LunchOrderController::store($request, $student_id); //<- This isn't the correct syntax
return redirect('/students');
}
LunchOrderController
public function store(Request $request, $student_id)
{
LunchOrder::create(array_merge(request(['lunch_value']), ['student_id' => $student_id]));
return null;
}
【问题讨论】:
-
据我所知,您不能将 2 个控制器设置为一个路由。您可以使用观察者进行此操作。或者,您可以为 luncorder 函数创建一个特征,并从学生控制器和午餐订单控制器调用该特征函数。或者你可以创建事件/监听器。
-
能不能发个小代码
-
您应该立即在 lunchController 上执行此操作,因为您应该可以控制您的模型以及它们的创建方式,请这样想:如果您的学生将创建并且由于某种原因您的午餐创建没有t 成功完成,您应该能够恢复创建的学生。
-
我添加了一些代码作为我的目标示例。据我了解,我想让控制器坐在对 SQL 表所做的任何更改之间。我也不想在一个控制器中创建两组不同的数据。可能存在一个单独创建学生的实例,可能是由管理员创建的,我只想创建一个学生记录。
标签: laravel controller