2017-08-07 282 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

已更新的問題 –