在Laravel 5.3中调用未定义的方法Illuminate \ Support \ MessageBag :: put()

时间:2017-04-21 20:08:01

标签: php laravel validation debugging

当我尝试通过以下验证返回错误时:

return Redirect::back()->withErrors($validator)->withInput();

它给了我这个错误:

Call to undefined method Illuminate\Support\MessageBag::put()

位于: vendor\laravel\framework\src\Illuminate\Http\RedirectResponse.php line 133

代码是:

/**
 * Flash a container of errors to the session.
 *
 * @param  \Illuminate\Contracts\Support\MessageProvider|array|string  $provider
 * @param  string  $key
 * @return $this
 */
public function withErrors($provider, $key = 'default')
{
    $value = $this->parseErrors($provider);

    $this->session->flash(
        'errors', $this->session->get('errors', new ViewErrorBag)->put($key, $value)
    );

    return $this;
}

如您所见,它应该使用ViewErrorBag中的put方法而不是MessageBag!

任何帮助都将不胜感激......

2 个答案:

答案 0 :(得分:0)

get('errors', new ViewErrorBag)密钥在会话中不存在时,

ViewErrorBag将返回errors。在这种情况下,会话中确实存在errors,它似乎是MessageBag的实例。因此,get('errors', new ViewErrorBag)会返回MessageBag,然后尝试在其上调用put(),这会给您出错。

您需要在代码中找到您在会话MessageBag密钥中存储errors的内容,然后进行更改。

答案 1 :(得分:0)

我认为你应该更新你的代码:

def start(self, table):
    list_a = ["a is first letter", "b is second letter","c is third letter"]
    list_b = ["e4", "f5", "g6"]

    for i in range(len(list_a)):
        item1 = QtGui.QTableWidgetItem()
        item1.setText(list_a[i])
        table.setItem(i, 0, item1)

        button1 = QtGui.QPushButton()
        button1.setText("add")
        button1.clicked.connect(self.add)

        item2 = QtGui.QTableWidgetItem()
        item2.setText(list_b[i])

        table.setItem(i, 1, item2)
        table.setCellWidget(i, 2, button1)

OR  您需要更新作曲家:

 return redirect()->back()
           ->withInput()
           ->withErrors($validator);