Hei我正在制造一个控制器来从另一个表获取当前ID,并且需要这样做,因为我在此上遇到了一些错误
函数/ directory / :: store()的参数太少,传递了1个参数,而恰好是2个参数
这是我的功能存储控制器
public function store(Request $request, $id)
{
$this->validate($request, array(
'A' => 'required|max:200',
'B' => 'required|max:800'
));
$try = new Me();
$try->id_tableA = Auth::id();
//$id = 1;
$incase = Incase::find($id);
$try->id_tableB = $incase->id;
$try->A = $request->A;
$try->B = $request->B;
$try->save();
return redirect()->route('controller.index');
}
因此,我在写$id = 1
时可以使用自己的初始化值插入到表中
但是当我找到id并在函数参数上使用$ id创建参数时,它会变成错误,就像我在标题中所说的那样,如果这个问题很快就能解决,您能帮我高兴吗
答案 0 :(得分:1)
感谢Chay22,当您在上一个答案中告诉我时,我有了一些主意,
所以我在laravel上编辑表单,控制器和路线
Route::post('directory/{incase}','ControllerController@store')->name('controller.store');
在表格上,我在路线中传递了第二个参数
{{ route('controller.store',$incase->id) }}
在我的控制器上,我将ID更改为$ incase
public function store(Request $request, $incase)
在我的路线上,我进行了发布路线以将ID检索到db
Route::post('directory/{incase}','ControllerController@store')->name('controller.store');
答案 1 :(得分:0)
两者之间的区别
public function store(Request $request, $id)
和
public function store(Request $request, $id = 1)
是前者,没有默认值(必需),而后者有一个1
(可选)。很明显吧?
因此,只要您尝试使用带有route('controller.store')
的控制器方法的第一个示例来调用所属路由。因为没有传递参数,这将引发错误。结论是在调用ID时传递ID,例如route('controller.store', [1])
或者,如果您将其设计为具有要传递的可选ID的功能,那么您现在就在做。
根据喜好,我稍微重写了您的代码
public function store(Request $request, $id)
{
$incase = Incase::findOrFail($id);
$this->validate($request, array(
'A' => 'required|max:200',
'B' => 'required|max:800'
));
$try = new Me();
$try->id_tableA = Auth::id();
$try->id_tableB = $incase->id;
$try->A = $request->A;
$try->B = $request->B;
$try->save();
return redirect()->route('controller.index');
}
我首先检查Incase
中是否存在从路由给出的ID,然后如果找不到ID,则抛出(显示)404响应。