注意:
以下の回答は、2009年のレガシーブラウザの状態を反映しています。2017年にJavaScriptを介してファイル入力要素の値を実際に設定できるようになりました。
詳細とデモについては、この質問の回答を参照してください:
プログラムでファイル入力値を設定する方法(つまり、ファイルをドラッグドロップする場合)?
この質問が重複していることは知っていますが、誰かが私を助けてくれるかもしれないと思います。
最初に問題を聞いてみましょう。
名前、順序、パブリック、パスヘッダー、パスホームなど、いくつかのフィールドを更新するフォームがあります。私の質問は次のとおりです。
入力タイプファイルを再度クリックせずに、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);
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加