![](/img/trans.png)
[英]if and else condition not working in laravel for the array of data
[英]Laravel 5 if condition not working on last condition (else)
我有一個status-text
字段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
起作用,因此,如果我將注釋字段保留為空並提交,則會重定向到供稿頁面,並顯示一條錯誤消息,指出該字段不能為空。
這項工作
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);
}
}
我不確定還有什么嘗試。
用偽代碼表示您正在嘗試執行此操作
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
語句。 結果,您的代碼將更加整潔並更具可讀性。
如果您的文本字段在提交時為空,則不會提出要求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.