Laravel 如何处理表单多余参数(_token,_method)?
问题 #
1.在提交表单时会随代 _token 一起提交 ( <input type='hidden' name='_token' value='...'>
)
2.在修改方法时需要标注请求类型例如 ( <input type='hidden' name='_method' value='put'>
)
请求后,后台数据会直接接收到 _method , _token 。 每次存入数据库时都需要unset这两个参数么?
应急方法 #
if( !function_exists('__field') ){
function __field( $data )
{
$field = [
"_token" , "_method"
];
foreach ( $field as $item ){
if( isset($data[$item]) ){
unset($data[$item]);
}
}
return $data;
}
}
控制器代码
public function update(RoleSave $request, $id)
{
RoleModel::where("id" , $id)->update(__field($request->all()));
return success( 'SUCCESS');
}
翻了下手册本给模型加了白名单提供了允许批量跟新的字段,本以为就把问题解决了
此方法只支持 create 并不支持 update 意思就是说在 update 时如果带有表里不存在的字段一样会报错,这也算是解决了一半吧!
在屏蔽 Token 方面还有一个方法也是 @Summer 提供的VerifyCsrfToken 添加过滤条件
求解,更好的办法过滤掉多余参数!.
高认可度评论:
把
改为
这样就能用 fillable 白名单模式了. 就像楼上所说, 你的代码的update用的是 QueryBuilder 而不是 model 的 update.
不过对于laravel5来说, 直接用 注入 最方便了.
利用 https://learnku.com/docs/laravel/5.3/eloquent#批量赋值
@Summer 批量赋值只有在 create时有效,update 无效!已试.
参考 phphub.org 源码解决了:+1: !.算是借鉴了..
$allowed_fields and performUpdate function
为何要直接用表单的request的数据?自己都不转一层?好可怕~!!!
@5J request 有 validation 层先处理后再做入库处理 :tada:
@aqyuyang 对Model 进行Update 操作 MassAssignment 会没有效果? 不太可能吧
不是说模型的话 请忽略。。。
调用的fill 方法
我以为是
$request->except('_token', '_method')
...$request->except('_token', '_method')
@JasonXt 指的模型在批量更新时 黑白名单 在批量创建时有效,批量更新时无效!.
@JasonXt 好吧 你那个其实走的不是模型 走的是 QueryBuilder
把
改为
这样就能用 fillable 白名单模式了. 就像楼上所说, 你的代码的update用的是 QueryBuilder 而不是 model 的 update.
不过对于laravel5来说, 直接用 注入 最方便了.
这样不就可以触发了 fillable 了?