函数目录:: store()的参数太少,已传递1个,正好是2个

时间:2018-09-03 15:59:55

标签: php laravel controller

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创建参数时,它会变成错误,就像我在标题中所说的那样,如果这个问题很快就能解决,您能帮我高兴吗

2 个答案:

答案 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响应。