Laravel记录未提交


Laravel record not submitting

我有一个表单在我的Laravel 4 web应用程序,是拒绝提交到数据库。每次我尝试提交,页面只是重新加载,我看到没有错误信息,甚至在laravel日志。我花了两天时间试图弄清楚问题是什么,因为我似乎看不到代码有什么问题。

任何帮助都将不胜感激。

/****表单视图***/

<div class="container">
   <div class="row">
            @if(Session::has('success'))
               <div class="alert alert-success">
                   <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
                   {{Session::get('success')}}
               </div>
                  @elseif(Session::has('fail'))
               <div class="alert alert-danger">
                   <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
                   {{Session::get('fail')}}
               </div>
            @endif
    </div>
   @include('partials.admin-navbar')
        <div class="admin_profile_content">
    <form class="" method="post" action=" {{URL::route('postSubmitCompetition')}}">
          <div class="" style="width:80%; margin:auto;">
                 <div class="panel panel-default">
                      <div class="panel-heading">Organization </div>
                          <div class="panel-body">
                               <div class="form-group">
                                    <label for="" class="col-sm-2 control-label">Select the Organization hosting this competition </label>
                                    <div class="col-sm-10">
                                        {{ Form::select('organization', $organizations, null, ['class' => 'form-control']) }}
                                        <p class="text-danger">
                                            @if($errors->has('organization'))
                                                {{ $errors->first('organization') }}
                                            @endif
                                        </p>
                                    </div>
                               </div>
                          </div>
                 </div>
                 <div class="panel panel-default">
                      <div class="panel-heading">Competition name </div>
                          <div class="panel-body">
                               <div class="form-group">
                                    <label for="" class="col-sm-2 control-label">Competition name </label>
                                    <div class="col-sm-10">
                                      <input type="text" class="form-control" id="" name="competition_name">
                                        <p class="text-danger">
                                            @if($errors->has('competition_name'))
                                                {{ $errors->first('competition_name') }}
                                            @endif
                                        </p>
                                    </div>
                               </div>
                          </div>
                 </div>
                <div class="panel panel-default">
                      <div class="panel-heading">Prizes </div>
                      <div class="panel-body">
                            <div class="form-group">
                                <label for="" class="col-sm-2 control-label">Total prize pool</label>
                                <div class="col-sm-10">
                                  <input type="text" class="form-control" id="" name="total_prize">
                                </div>
                           </div>
                            <div class="form-group" style="padding-top:41px;">
                                <label for="" class="col-sm-2 control-label">Number of prize-winning places</label>
                                <div class="col-sm-1">
                                    Top
                                </div>
                                <div class="col-sm-2">
                                    <input type="text" class="form-control" id="" name="number_of_winning_places">
                                    <p class="text-danger">
                                        @if($errors->has('number_of_winning_places'))
                                            {{ $errors->first('number_of_winning_places') }}
                                        @endif
                                    </p>
                                </div>
                                <div class="col-sm-3">
                                  competitors will win a prize
                                </div>
                           </div>
                      </div>
                </div>
                <div class="panel panel-default">
                      <div class="panel-heading">Timeline </div>
                          <div class="panel-body">
                              <div class="form-group">
                                    <label for="" class="col-sm-2 control-label"> Start and end date </label>
                                    <div class="col-sm-3">
                                       <input type="text" class="form-control" id="competition_start_date" name="competition_start_date">
                                        <p class="text-danger">
                                            @if($errors->has('competition_start_date'))
                                                {{ $errors->first('competition_start_date') }}
                                            @endif
                                        </p>
                                        <input type="hidden" name="hidden_start_date" id="hidden_start_date">
                                    </div>
                                     <div class="col-sm-2">
                                      to
                                    </div>
                                    <div class="col-sm-3">
                                       <input type="text" class="form-control" id="competition_end_date" name="competition_end_date">
                                        <p class="text-danger">
                                            @if($errors->has('competition_end_date'))
                                                {{ $errors->first('competition_end_date') }}
                                            @endif
                                        </p>
                                        <input type="hidden" name="hidden_end_date" id="hidden_end_date">
                                    </div>
                              </div>
                          </div>
                </div>
                 <div class="panel panel-default">
                      <div class="panel-heading">Competition details </div>
                          <div class="panel-body">
                              <div class="form-group">
                                    <label for="" class="col-sm-2 control-label"> Competition details </label>
                                    <div class="col-sm-10">
                                      <textarea class="form-control" name="competition_details" id="competition_details" rows="10"> </textarea>
                                        <p class="text-danger">
                                            @if($errors->has('competition_details'))
                                                {{ $errors->first('competition_details') }}
                                            @endif
                                        </p>
                                    </div>
                              </div>
                          </div>
                </div>

              <div class="panel panel-default">
                  <div class="panel-heading">Competition Status </div>
                  <div class="panel-body">
                      <div class="form-group">
                          <label for="" class="col-sm-2 control-label"> Set competition status </label>
                          <div class="col-sm-10">
                             <select class="form-control" name="competition_status" id="competition_status">
                              <option value="0">Coming Soon</option>
                              <option value="1">Live </option>
                             </select>
                          </div>
                      </div>
                  </div>
              </div>
                <div class="panel panel-default">
                      <div class="panel-heading">Competition data </div>
                          <div class="panel-body">
                              <div class="form-group">
                                    <label for="" class="col-sm-2 control-label"> Upload the data for the competition </label>
                                    <div class="col-sm-10">
                                       <input type="file" id="competition_data_1" name="competition_data_1">
                                        <p class="help-block"> Data file/folder 1</p>
                                    </div>

                              </div>
                          </div>
                </div>
              {{ Form::token() }}
              <div class="panel panel-default">
                      <div class="panel-heading">Upload Competition </div>
                          <div class="panel-body">
                              <div class="form-group">
                                   <div class="col-sm-10">
                                    <input type="submit" class="btn btn-primary btn-lg btn-block" id="submit_competition" value="Submit">
                                   </div>
                              </div>
                          </div>
                </div>
          </div>
 </form>

<hr>

/*控制器方法*/

   public function postSubmitCompetition()
    {
   $validator = Validator::make(Input::all(), array(
       'organization' => 'required',
       'competition_name' => 'required',
       'prize_winning_places' => 'required',
       'competition_start_date' => 'required',
       'competition_end_date' => 'required',
       'competition_details' => 'required',
       'status' => 'required'
   ));
   if($validator->fails())
   {
     return Redirect::route('getSubmitCompetition')->withErrors($validator)->withInput();
   }
   else
   {
      $competition = new Competition();
      $competition->hosting_organization_id = Input::get('organization');
      $competition->competition_name = Input::get('competition_name');
      $competition->total_prize_pool = Input::get('total_prize');
      $competition->prize_winning_places = Input::get('number_of_winning_places');
      $competition->start_date = Input::get('competition_start_date');
      $competition->end_date = Input::get('competition_end_date');
      $competition->competition_details = Input::get('competition_details');
      $competition->status = Input::get('competition_status');

       if($competition->save())
       {
           return Redirect::route('getSubmitCompetition')->with('success', 'You have successfully created this competition');
       }
       else
       {
           return Redirect::route('getSubmitCompetition')->with('fail', 'An error occurred while creating that competition. Please contact sys admin');
       }
   }
}

/*路由*/

  Route::post('/admin/submit-a-competition', array('uses' => 'CompetitionController@postSubmitCompetition', 'as' => 'postSubmitCompetition'));

问题

Laravel永远不会保存你的数据,因为验证器失败。

$validator = Validator::make(Input::all(), array(
       'organization' => 'required',
       'competition_name' => 'required',
       'prize_winning_places' => 'required',
       'competition_start_date' => 'required',
       'competition_end_date' => 'required',
       'competition_details' => 'required',
       'status' => 'required'
   ));

需要prize_winning_placesstatus,但是视图中没有这两个字段的输入。

缺失的输入字段:

字段名:status -问题:您使用名称:competition_status而不是:status

<select class="form-control" name="competition_status" id="competition_status">
<option value="0">Coming Soon</option>
<option value="1">Live </option>
</select>

字段名:prize_winning_places -问题:您使用名称:** number_of_winning_places **代替prize_winning_places

<input type="text" class="form-control" id="" name="number_of_winning_places">
<标题> 解决方案

将$validator变量更改为:

$validator = Validator::make(Input::all(), array(
       'organization' => 'required',
       'competition_name' => 'required',
       'number_of_winning_places' => 'required',
       'competition_start_date' => 'required',
       'competition_end_date' => 'required',
       'competition_details' => 'required',
       'competition_status' => 'required'
   ));

检查这一行:

<form class="" method="post" action=" {{URL::route('postSubmitCompetition')}}">
这里的

form action是路由名而不是函数名。如:

Route::post('/save_data', array('uses' => 'CompetitionController@postSubmitCompetition', 'as' => 'postSubmitCompetition'));

它将把你的路由路由到函数