Php 无法更新文件上载表单,laravel表单绑定
你好,我必须编辑和更新文件上传的形式。当我编辑其他字段并上传照片时,它工作正常。但如果我编辑其他字段而不上载照片,则会显示错误“对非对象调用成员函数getClientOriginalName()” 我的看法Php 无法更新文件上载表单,laravel表单绑定,php,forms,laravel,Php,Forms,Laravel,你好,我必须编辑和更新文件上传的形式。当我编辑其他字段并上传照片时,它工作正常。但如果我编辑其他字段而不上载照片,则会显示错误“对非对象调用成员函数getClientOriginalName()” 我的看法 {{ Form::model($layer, array('method'=>'PATCH', 'route'=>array('edit-layer-patch', $layer->id), 'files'=> true)) }} <div class="f
{{ Form::model($layer, array('method'=>'PATCH', 'route'=>array('edit-layer-patch', $layer->id), 'files'=> true)) }}
<div class="form-group">
<input type="file" name="image" value="{{ $layer->img_path }}" class="form-control" onchange="readURL(this);" id="image" accept="image/*" />
{{ HTML::image('uploads/'. $layer->img_path, 'your image', array('id' => 'blah', 'width'=>150, 'height' => 100)) }}
</div>
<div class="form-group">
<label for="layer_name">Layer Name</label>
<input type="text" class="form-control" name="layer_name" value="{{ $layer->layer_name }}" />
</div>
<div class="form-group">
<label for="select_user">Select User</label>
<select name="select_user" class="form-control">
<option value="{{ $layer->user->id }}">{{ $layer->user->firstname }}</option>
@foreach($users as $user)
<option value="{{ $user->id }}">{{ $user->firstname }}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="select_style">Select Style</label>
<select name="select_style" class="form-control">
<option value="{{ $layer->style->id }}">{{ $layer->style->style_name }}</option>
@foreach($styles as $style)
<option value="{{ $style->id }}">{{ $style->style_name }}</option>
@endforeach
</select>
</div>
<div class="form-group">
<label for="select_category">Select Category</label>
<select name="select_category" class="form-control">
@if(!empty($layer->category->category_name))
<option value="{{ $layer->category->id }}">{{ $layer->category->category_name }}</option>
@foreach($categories as $category)
<option value="{{ $category->id }}">{{ $category->category_name }}</option>
@endforeach
@else
<option value="">Deleted</option>
@foreach($categories as $category)
<option value="{{ $category->id }}">{{ $category->category_name }}</option>
@endforeach
@endif
</select>
</div>
<div class="form-group">
<label for="published">Published</label>
<input type="number" class="form-control" min="0" max="1" name="published" value="{{ $layer->published }}" />
</div>
<div class="form-group">
<label for="default">Default</label>
<input type="number" class="form-control" min="0" max="1" name="default" value="{{ $layer->default }}" />
</div>
<div class="form-group">
<button class="btn btn-primary" type="submit">Update</button>
<a class="btn btn-danger" href="{{ route('layers') }}">Cancel</a>
</div>
{{ Form::close() }}
请帮助我,谢谢您需要将所有图像内容移动到
if(Input::has('image'))
语句中。因为您这样做:
$image = Input::file('image');
$filename = $image->getClientOriginalName();
即使您不上传图像(因此,$image
为null
)
您需要将所有与图像相关的内容移动到if(Input::has('image'))
检查中
public function edit($id){
$destinationPath = 'uploads/';
$layer = Layer::find($id);
$validator = Validator::make(Input::all(), Layer::$rules);
if ($validator->fails()) {
return Redirect::route('edit-layer')->withErrors($validator)->with('message', 'Ups something happened');
}else{
if(Input::has('image')){
$image = Input::file('image');
$filename = $image->getClientOriginalName();
Input::file('image')->move($destinationPath, $filename);
// ...
}else{
// ...
}
return Redirect::route('layers')->with('message','Layer Updated');
}
}
更新
从评论中
admin/layers/%7Bid%7D/edit
实际上是admin/layers/{id}/edit
看起来验证失败,它转到Redirect::route('edit-layer')
,缺少id参数
这样做:
return Redirect::route('edit-layer', array($id))->withErrors($validator)->with('message', 'Ups something happened');
我这样做了,但它仍然显示“Symfony\Component\HttpKernel\Exception\NotFoundHttpException”,这可能是一个新问题。重定向是发生过还是之前显示过错误?当我单击“提交”时,重定向也会发生。它从更新(当我上传照片时)admin/layers/%7Bid%7D/edit添加了不同url的百分比谢谢,我找到了解决方案。错误发生在我验证表单时。我删除了验证,它工作了。它会在上传照片和不上传照片的情况下更新表单。非常感谢你。我只有13个名声,我无法推翻你的回答我修正了错误。验证向我显示了错误,因为我需要输入文件,这就是原因。(脸掌)
return Redirect::route('edit-layer', array($id))->withErrors($validator)->with('message', 'Ups something happened');