我应该在laravel 5.2中使用批量分配来上传文件吗


Should i use mass assignment for file upload in laravel 5.2?

希望每个人都做得很好。

我已经使用laravel 5.2几天了,我一直坚持这样一个概念,即当文件上传到服务器,其路径存储在数据库中,从该数据库表中,获取存储在媒体表中的id时,我们应该由最终用户对插入的文件使用批量分配填充/保护。

所以我的问题实际上是,我们是否应该对上传的文件进行大规模分配检查,以插入或更新。不管怎样,都需要解释。如果可能的话,请附上所采用方法的示例。

提前向大家表示感谢。

我认为文件上传和Eloquent批量分配的相关性不够,您不想考虑这个问题。您可以在服务器上有一个固定目录,用于存储所有上传的文件,并使这些文件在磁盘上的名称与其关联模型的id相同。

只允许对您知道不会被滥用的字段进行批量分配,或者其值必须由应用程序严格监控,但良好的验证应该可以过滤掉大多数问题。

因此,例如,您可以在控制器中设置以下内容(在进行其他文件验证(如类型及其存在)后):

$user = Auth::user(); //Logged in user
$photo = new Photo([
    "caption" => $request->input('caption'),
    "location" => $request->input('location'), 
    "time" => $request->input('time'),
    "filename" => $request->file('photo')->getClientOriginalName()
]); //Eloquent model
$user->photos()->save($photo);
$request->file('photo')->move($destinationPath, $photo->id);

批量分配就是对我们从表单中获得的输入进行检查。如果用户试图通过编辑源代码(进入inspect元素部分)并为不允许的其他字段提供值(批量分配)来添加字段,那么这些值将被框架忽略。然而,如果我们在控制器或模型文件中以编程方式对任何值进行任何更改,这些更改将生效,因为这是由后端(服务器端)的开发人员完成的,而不是由公共端的某些用户完成的。

是的。使用批量赋值是一种很好的做法,以确保只有允许的字段从表单中获取值,而不是我们不希望存储在数据库中的其他字段。