由于表单令牌,Laravel foreach 输入所有更新失败
Posted
技术标签:
【中文标题】由于表单令牌,Laravel foreach 输入所有更新失败【英文标题】:Laravel foreach input all update fails because of form token 【发布时间】:2013-11-14 02:50:45 【问题描述】:我最近发现了我的问题是什么导致了我的表单错误。
我创建一个表单帖子并循环遍历它们
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 表单标签?
【问题讨论】:
【参考方案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
字段的情况下获取所有内容(但不确定这是否解决了问题)。
【讨论】:
【参考方案2】:改变
$input = Input::all();
到
$input = Input::except('_token');
【讨论】:
在 laravel 中有没有像all
这样的方法,可以在没有 _token
和 _method
的情况下检索所有需要的表单数据?或者我需要延长请求?以上是关于由于表单令牌,Laravel foreach 输入所有更新失败的主要内容,如果未能解决你的问题,请参考以下文章