我有一个编辑表单,其中包含一个图像字段,用户可以根据需要上传新图像。
但如果用户没有上传新照片,我只想使用数据库中已有的照片。并且根本不更新图像字段。但是在我的代码中,每当我尝试不上传新的图像形式时,都没有采用旧的输入值。
这是我的编辑功能:
public function expenseupdate1(){
$input = Input::only('id','Expense_date','Expense_category_id','Vendor_id','Customer_id','Amount','Tax1_id','Tax2_id','Note','Receipt');
$data=new Expense;
$id=$input['id'];
$Expense_date=$input['Expense_date'];
$Expense_category_id=$input['Expense_category_id'];
$Vendor_id=$input['Vendor_id'];
$Customer_id=$input['Customer_id'];
$Amount=$input['Amount'];
$Tax1_id=$input['Tax1_id'];
$Tax2_id=$input['Tax2_id'];
$Note=$input['Note'];
if(Input::hasFile('Receipt')) {
$file = Input::file('Receipt');
$name = time() . '-' . $file->getClientOriginalName();
$data->Receipt = $name;
$file->move(public_path() . '/images/', $name);
}
$affectedrows=Expense::where('id', '=', $id)->update(array('Expense_date' => $Expense_date,'Expense_category_id'=>$Expense_category_id,'Vendor_id'=>$Vendor_id,'Customer_id'=>$Customer_id,'Amount'=>$Amount,'Tax1_id'=>$Tax1_id,'Tax2_id'=>$Tax2_id,'Note'=>$Note,'Receipt'=>$Receipt));
return redirect('expenseinfo');
}
这是我的更新表单图片字段代码:
<td> <div class="form-group"style="margin-left:-305px">
{!! Form::label('image', 'Receipt') !!}
<input Input::old('Receipt'), type="file" name="Receipt" value = '{{$data->Receipt}}'></td><td><?php echo $data->Receipt; ?></td>
</div></td>
<tr>
<td>{!! Form::submit('Update', array( 'class'=>'' )) !!}
{!! Form::close() !!}</td>
任何帮助都将受到极大的赞赏
答案 0 :(得分:1)
您不会为文件设置默认值。
文件输入类型会创建一个字段 用户可以通过它上传文件 从他们的本地计算机或网络。 VALUE属性指定名称 的初始文件,但它是 通常被浏览器忽略为 安全预防措施。
因此,您的应用程序运行正常。由于图片已经在数据库中,因此您无需再次上传图片。
另外,仅供参考,但你可以大大清理你的控制器方法!
/**
* Update Expense 1
*
* @param Request $request
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
*/
public function expenseupdate1(Request $request){
$expense = Expense::find($request->input('id'));
$expense->fill($request->only('id','Expense_date','Expense_category_id','Vendor_id','Customer_id','Amount','Tax1_id','Tax2_id','Note','Receipt'));
if($request->hasFile('Receipt')) {
$file = $request->file('Receipt');
$name = time() . '-' . $file->getClientOriginalName();
$expense->Receipt = $name;
$file->move(public_path('/images/'), $name);
}
$expense->save();
return redirect('expenseinfo');
}
以上假设您在控制权之上有必要的use
陈述,即
use Illuminate\Http\Request;
use App\Expense; //Assuming that Expense is in this namespace
如果您还没有,则应为模型设置可填充数组,以允许fill()
方法(质量分配)工作http://laravel.com/docs/5.1/routing#route-model-binding
你可以做的更多,但我已经超出了这个问题的范围。不过,我建议看看:
http://laravel.com/docs/5.1/controllers#restful-resource-controllers http://laravel.com/docs/5.1/controllers#dependency-injection-and-controllers Lockbox
希望这有帮助!