簡體   English   中英

Laravel 5如果條件不適用於最后一個條件(其他)

[英]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

如果這樣做,您將通過驗證檢查刪除重復項,創建狀態,閃爍消息,然后重定向。

盡量避免嵌套條件。 盡量避免elseelse if語句。 結果,您的代碼將更加整潔並更具可讀性。

如果您的文本字段在提交時為空,則不會提出要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM