由于表单令牌,Laravel foreach输入所有更新失败

时间:2013-11-03 09:40:27

标签: php arrays forms laravel laravel-4

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

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

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表单标记吗?

2 个答案:

答案 0 :(得分:24)

变化

 $input = Input::all();

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

答案 1 :(得分:1)

确保您的$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字段的所有内容(但不确定这是否解决了问题)。