我有一个文本字段status-text
,允许用户提交他们的状态。
我还有一个图片上传字段,用于将图片添加到状态。
在我的if条件下,我首先检查输入是否有任何数据,然后检查输入是否有图像并且验证器没有失败,然后我检查验证器是否没有失败(提交没有图像的状态),最后我做了一个else
,它应该是"如果输入没有任何数据"
前3个检查正在运行,但最后else
没有。显然,由于某种原因,代码没有达到最终的结果。
这是视图
@if (count($errors) > 0)
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
@include('partials/flash')
<div class="row">
<div class="col-md-12">
{!! Form::open(['files' => true]) !!}
<div class="panel panel-default">
<div class="panel-heading">Add New Status</div>
<div class="panel-body">
<div class="form-group">
<label for="status-text">Write Something</label>
<textarea class="form-control" name="status-text" id="status-text"></textarea>
</div>
</div>
<div class="panel-footer clearfix">
<div class="row">
<div class="col-md-6">
<label for="file-upload" class="custom-file-upload">
<i class="fa fa-image"></i>
</label>
<input id="file-upload" name="status_image_upload" type="file">
</div>
<div class="col-md-6">
<button class="btn btn-info btn-sm pull-right"><i class="fa fa-plus"></i> Add Status</button>
</div>
</div>
</div>
</div>
{!! Form::close() !!}
这是FeedController@index
if($request->has('status-text')) {
$text = Input::get('status-text');
$rules = [
'status-text' => 'required|string'
];
$validator = Validator::make($request->all(), $rules);
if($request->hasFile('status_image_upload') && !$validator->fails()) {
$image = $request->file('status_image_upload');
$imageName = str_random(8) . '_' . $image->getClientOriginalName();
//$imageFull = str_random(8) . '_' . $image->getClientOriginalName();
$image->move('uploads/status_images', $imageName);
$userStatus = new Status;
$userStatus->status_text = $text;
$userStatus->image_url = $imageName;
$userStatus->type = 1;
$userStatus->user_id = Auth::user()->id;
$userStatus->save();
flash('Your status has been posted');
return redirect(route('feed'));
} elseif(!$validator->fails()) {
$userStatus = new Status;
$userStatus->status_text = $text;
$userStatus->user_id = Auth::user()->id;
$userStatus->save();
flash('Your status has been posted', 'success');
return redirect(route('feed'));
} else {
$messages = $validator->errors();
return redirect(route('feed'))->withErrors($messages);
}
我尝试过使用if($validator->fails())
- 它没有用。
我也试过返回一个简单的字符串return 'field cannot be empty';
只是为了测试它,它也不起作用。
我为post_comment
运行相同的代码,它适用于else
,因此,如果我将评论字段留空并提交,我会被重定向到Feed页面并显示错误消息该字段不能为空。
这项工作
if(Input::has('post_comment')) {
$rules = [
'comment-text' => 'required|string'
];
$validator = Validator::make($request->all(), $rules);
if(!$validator->fails()) {
$status = Input::get('post_comment');
$commentBox = Input::get('comment-text');
$selectedStatus = Status::find($status);
$selectedStatus->comments()->create([
'comment_text' => $commentBox,
'user_id' => Auth::user()->id,
'status_id' => $status
]);
flash('Your comment has been posted', 'success');
return redirect(route('feed'));
} else {
$messages = $validator->errors();
return redirect(route('feed'))->withErrors($messages);
}
}
我不确定还有什么可以尝试。
答案 0 :(得分:2)
在伪码中,您说您正在尝试这样做
if input exists
if image exists and validator passes
elsif validator passes
end
else
// no data
end
但是你的代码说你正在做这个
if input exists
if image exists and validator passes
elsif validator passes
else
// no data
end
end
我会完全重构这一点。防守计划。
if no data
// handle no data
return;
end
if validator fails
// handle invalid data
return;
end
create new Status
if image exists
// handle image upload
end
flash message
redirect
如果您这样做,您将通过验证检查,创建状态,闪烁消息和重定向来删除重复。
尽量避免嵌套条件。尽量避免使用else
和else if
语句。因此,您的代码将更清晰,更易读。
答案 1 :(得分:0)
如果您的文字字段在提交时为空,则不会在请求中。