2016-07-20 7 views
0

私はユーザーがステータスを送信できるようにするテキストフィールドstatus-textを持っています。Laravel 5状態が最後の条件で動作していない場合(else)

ステータスに画像を追加する画像アップロードフィールドもあります。

私の条件では、入力にデータがあるかどうかを確認してから、入力に画像があり、検証が失敗しないかどうかを確認してから、検証が失敗しないかどうかをチェックします画像なしのステータス)は、最後に "入力にデータがない場合"とされる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() !!} 

であり、これは[email protected]

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); 
     } 
    } 

WORKS。

答えて

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 

あなたがこれを行う場合は、メッセージ、およびリダイレクトを点滅状態を、作成、あなたの検証チェックで重複を削除します。

条件文を入れ子にしないようにしてください。 elseelse ifステートメントを避けてください。あなたのコードはより洗練され、より読みやすくなります。

0

送信時にテキストフィールドが空白の場合は、リクエストされません。擬似コードで

+0

十分な評判を得ていないコメントの制限は理解できますが、回答をコメントとして投稿しないようにしてください。この質問に対する答えがわかっているなら、それを編集して、良い回答を書くための[StackOverflow guidelines(http://stackoverflow.com/help/how-to-answer)]を熟読してください。 – user3078414

関連する問題