【问题标题】:Too few arguments to function directory::store(), 1 passed and exactly 2 expected函数目录::store() 的参数太少,通过了 1 个,预期正好有 2 个
【发布时间】:2018-09-03 15:59:55
【问题描述】:

嘿,我正在制作一个控制器以从另一个表中获取当前 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 它会变成错误,就像我在标题中所说的那样,如果这个问题可以很快解决,你们能帮帮我吗?

【问题讨论】:

  • 错误不在 yout 方法内部,而是在您调用该方法时发生(您只给出 1 个参数而不是 $request 和 $id)。你能告诉我们你在代码中调用::store的地方吗?
  • 我在表单上调用它

标签: php laravel controller


【解决方案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');

【讨论】:

    【解决方案2】:

    两者的区别

    public function store(Request $request, $id)
    

    和,

    public function store(Request $request, $id = 1)
    

    是前者,没有默认值(必需),而后者有一个 1(可选)。很明显吧?

    因此,每当您尝试使用带有route('controller.store') 的控制器方法的第一个示例调用所属路由时。它将引发错误,因为没有传递参数。结论就是调用的时候传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 响应。

    【讨论】:

    • 所以根据您告诉我的内容,我更改了代码,但仍然出现错误,当我使用此代码调用它时,我得到了 id {{ route('controllers.store',$incase-> id) }} 并将我的函数参数更改为 public function store(Request $request, $incase){ ...... } 但仍然出现错误 Too little arguments to function /directory/::store(), 1 pass and正好 2 个预期
    猜你喜欢
    • 2020-01-29
    • 2020-10-17
    • 2020-05-06
    • 2018-10-11
    • 2020-01-23
    • 1970-01-01
    • 2019-06-29
    • 2019-10-29
    • 2020-04-22
    相关资源
    最近更新 更多