设置默认值
注:设置默认值
答案(S)下面反映的2009年旧浏览器的状态,现在你可以通过JavaScript在实际设置文件输入元素的值2017年
见这个问题的详细信息,答案以及演示:
How to set file input value programatically (i.e.: when drag-dropping files)?
我知道这个问题是重复的,但我想,也许someo ne可以帮助我。
让我先问问题。
我有一个表格来更新某些字段:姓名,秩序,公共,pathheader和pathhome和我的问题是这样的:
这是可能的更新形式,在pathheader和pathhome相同的值并且不点击输入类型文件再次?
输入类型的文件看起来像在这里:
@if (Storage::disk('projects')->has($project->slug))
<img src="{{ asset('/storage/projects/'.$project->slug.'/header.png') }}" id="img" class="img" style="width:100%;height:200px;background-color:#ccc;border:2px solid gray;">
@else
<img src="" id="img" class="img" style="width:100%;height:200px;background-color:#ccc;border:2px solid gray;">
@endif
<input type="file" name="pathheader" id="pathheader" class="form-control-file" aria-describedby="fileHelp" style="display:none;">
所以,当我渲染视图,它显示我认为这是不实际的找到它的服务器,然后再次单击它的图片,如果你不想要改变它。
让我知道你的意见,如果有人知道如何做到这一点,我将不胜感激。 (如果知道如何使用一些图书馆或其他功能做到这一点,让我知道它
非常感谢
解决
更简单的方法:。请在控制器不需要数据
。内功能:
public function updateProject(Request $request, $id)
{
$this->validate($request, array(
'slug'=> 'required',
'order'=> 'required',
'public'=> 'required'
));
$project = Project::find($id);
$project->slug = $request->input('slug');
$project->order = $request->input('order');
$project->public = $request->input('public');
if ($request->hasFile('pathheader')){
$project->pathheader = $request->file('pathheader');
\Storage::disk('projects')->putFileAs($project->slug,$project->pathheader,'header.png');
}
if ($request->hasFile('pathhome')){
$project->pathhome = $request->file('pathhome');
\Storage::disk('projects')->putFileAs($project->slug,$project->pathhome,'home.png');
}
$project->save();
return redirect()->route('admin.projects.show', $project->id);
}
由于浏览器的安全性,你不能只将默认值放到文件输入。
更好的方法是在更新记录之前检查用户是否选择了文件。
所以您的更新功能:
public function update(){
// Make sure you didn't required the user to select file.
$attribute = [
'name' => $request->name,
'order' => $request->order
]
if($request->hasFile('pathheader')){
//If user select a file, upload the file
//Then you should update your record by
//adding fields to your update attribute.
$attribute['pathheader'] => $pathheader;
}
//otherwise, no changes will happen to your 'pathheader' column.
DB::table('yourtable')->where('id',$id)->update($attribute);
}
非常感谢@RomnickSusa我总是试图让它更难。我相信,更简单的方法就是你的。它成功了。我将用控制器中的新功能编辑我的问题,您可以检查它,如果您认为它可以更有效,只需发表评论。无论如何,谢谢你的回答:) –
好吧,更新你的问题,然后生病更新我的答案。如果你提供你的控制器的代码会更好。 –
已更新的问题 –
我希望你已经看到了这一点:https://stackoverflow.com/q/1696877/5894241 – Nisarg
无法更新的形式。您更新数据库中的__record__。如果某个字段的值是__not provided__ - 则不需要更新此字段。 –
嗨@NisargShah首先感谢您的快速回答,我已经看到了这一点。而且我看到或许更好的方法是使用JS立即自动加载文件。你怎么看,这是最好的方式? –