2017-08-07 235 views
1

注:设置默认值

答案(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); 
} 
+0

我希望你已经看到了这一点:https://stackoverflow.com/q/1696877/5894241 – Nisarg

+0

无法更新的形式。您更新数据库中的__record__。如果某个字段的值是__not provided__ - 则不需要更新此字段。 –

+0

嗨@NisargShah首先感谢您的快速回答,我已经看到了这一点。而且我看到或许更好的方法是使用JS立即自动加载文件。你怎么看,这是最好的方式? –

回答

2

由于浏览器的安全性,你不能只将默认值放到文件输入。

更好的方法是在更新记录之前检查用户是否选择了文件。

所以您的更新功能:

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); 
} 
+0

非常感谢@RomnickSusa我总是试图让它更难。我相信,更简单的方法就是你的。它成功了。我将用控制器中的新功能编辑我的问题,您可以检查它,如果您认为它可以更有效,只需发表评论。无论如何,谢谢你的回答:) –

+0

好吧,更新你的问题,然后生病更新我的答案。如果你提供你的控制器的代码会更好。 –

+0

已更新的问题 –