Laravel 对于每个输入所有更新都失败,因为表单令牌


Laravel foreach input all update fails because of form token

我最近发现了导致表单错误的问题。

我创建一个表单帖子并通过它们循环

public function update()
    {
        $input = Input::all();
        foreach ($input as $key => $value) {
            $update = Setting::find($key);
            $update->value = $value;
            $update->save();
        }
        return Redirect::back();
    }

问题是我收到以下错误

Creating default object from empty value

因为令牌包含在表单发布中,所以Laravel会自动呈现为表单

如果我停止使用Laravel表单打开并使用html表单标签,一切正常。

有没有办法在打开 laravel 表单的情况下绕过这一点,或者我应该使用 html 表单标签?

更改

 $input = Input::all();

 $input = Input::except('_token');

确保您的$update = Setting::find($key);返回有效的对象,因为当$update为 NULL 或未定义并且您尝试在代码中使用它时,应该触发该错误

$update->value = $value;

当系统中E_STRICT打开时,此警告Creating default object from empty value发生,但这不是真正的问题,相反,您没有得到所需的结果,很可能Setting::find($key)没有得到您要求的东西并创建一个新的Setting对象,请检查您的模型并确保您在::find($key)中传递了正确的值, 键应该是primary键。

更新:还要记住,当你使用

$input = Input::all();
foreach ($input as $key => $value) { ... }

在这种情况下,$key将是表单中使用的input/field的名称,它可能包含隐藏的_token字段,但_token可能无法在数据库中作为field/column使用。因此,您可以尝试获取除_token之外的所有内容

$input = Input::except('_token'); // get everything without _token

在没有_token字段的情况下获取所有内容(但不确定这是否可以解决问题)。