Laravel。控制器没有从表单获取值

时间:2014-09-27 16:09:11

标签: laravel

控制器未从FORM获取数据。我意识到Form默认使用Post方法,而Route使用Get,但如果我改变了,那么表单将不会显示表单字段。验证失败,因为“required”没有获得任何值,因此它返回到同一页面。如果我删除了验证过滤器,那么它会转到结果页面,但它所做的只是显示表的所有内容,因为它从表单中没有获取参数(where)。奇怪的是,在过去,它工作,但我必须搞砸了部分代码,现在却没有。为了节省空间,我遗漏了许多在问题中没有发挥作用的领域。

该表格有三个相互依存的字段国家,地区和城镇,这些字段填写正常。

FORM:

<form action = "{{URL::route('sacapropiedades')}} "class="form-horizontal" id="my_form" name="my_form">

        <div class="form-group">            
        <div class="col-sm-3">      
        <label for="country">Pays</label>
        <select name ="country" {{ (Input::old('country')) ?' value ="' . e(Input::old('country')). '"' : ''  }} id = "country" class="form-control">                 
        @foreach($countries as $country)
        <option value="{{$country->country}}">{{$country->country}}</option>  
            @endforeach
        </select>
        </div>

        <div class="col-sm-3">
        <label for="town">Ville</label>
        <select name ="town" {{ (Input::old('town')) ?' value ="' . e(Input::old('town')). '"' : ''  }}id = "town" class="form-control">                 
        </select>
        </div>      

        </div><!-- END OF THIRD FORMGROUP -->
        <div class="form-group">
            <div class="col-sm-4">          
        </div>
        <div class="col-sm-2">
        <button type="submit" class="btn btn-success">Enviar</button>
        <button type="reset"  class="btn btn-danger">Borrar</button>
        </div>  
        </div>              
        </form>

路线

Route::get('realestate/listproperty', array(

        'as' =>'sacapropiedades',            
        'uses' =>'countriesregionstownsController@findproperty'       

        ));

CONTROLLER

public function findproperty(){

    /*IT REPEATS THE COUNTRY QUERY ABOVE BECAUSE IT IS GOING TO USE IT
     *ON THE RESULTS PAGE AND IT GIVES THE USER TO SELECT AGAIN OTHER COUNTRIES
     *WITHOUT HAVING TO RETURN TO THE FIRST PAST PAGE*/


    $countries = DB::table('properties')
        ->select('country')
        ->distinct()
        ->get();


     /*FIRST VALIDATE INPUT DATA*/

     $validator = Validator::make(Input::all(),

                array(

                  'country'      =>'required',
                  'regions'      =>'required',
                  'transaction'  =>'required',
                  'town'         =>'required'

                  ));

                if($validator->fails()){                   

                    return Redirect::route('showrealestate')
                    ->withErrors($validator)
                    ->withInput();
                  }

                else{

                    $country        = Input::get('country');
                    $region         = Input::get('regions');
                    $town           = Input::get('town');
                    $transaction    = Input::get('transaction');
                    $pricefrom      = Input::get('pricefrom');
                    $priceto        = Input::get('priceto');
                    $roomsfrom      = Input::get('roomsfrom');
                    $roomsto        = Input::get('roomsto');
                    $builtyear      = Input::get('builtyear');
                    $swimming       = Input::get('swimming');
                    $garden         = Input::get('garden');
                    $garage         = Input::get('garage');
                    $message        = Input::get('message');


                }

                $country = DB::table('countries')->where('id_pais', $country)->pluck('nombre_pais');
                $region = DB::table('regions')->where('id_region', $region)->pluck('nombre_region');
                $town = DB::table('cities')->where('id_localidad', $town)->pluck('nombre_localidad'); 

                $users = DB::table('users')

                ->join('properties', 'users.id', '=', 'properties.id_user_fk')
                ->select('users.email', 'properties.id_user_fk', 'properties.country', 'properties.region', 'properties.town',
                         'properties.price', 'properties.rooms','properties.m2','properties.swimming',
                         'properties.garden','properties.garage','properties.builtyear','properties.message',
                         'properties.pic1',
                         'properties.pic2', 'properties.pic3','properties.pic4','properties.pic5','properties.pic6');



                if (!empty($country)) {
                $users = $users->where('country', '=', $country);
                }
                if (!empty($region)) {                      
                $users =    $users->where('region', '=', $region);
                }

                if (!empty($town)) {
                $users = $users->where('town', '=', $town);
                }
                if (!empty($transaction)) {                      
                $users =    $users->where('transaction', '=', $transaction);
                }

                if (!empty($pricefrom)) {
               $users =  $users->where('price', '>', $pricefrom);
                }
                if (!empty($priceto)) {                      
                $users =    $users->where('price', '<', $priceto);
                }

                if (!empty($roomsfrom)) {
                $users = $users->where('rooms', '>', $roomsfrom);
                }
                if (!empty($roomsto)) {                      
                $users =    $users->where('rooms', '<', $roomsto);
                }

                if (!empty($builtyear)) {
                $users = $users->where('builtyear', '>', $builtyear);
                }
                if (!empty($swimming)) {                      
                $users =    $users->where('swimming', '=', $swimming);
                }

                if (!empty($garage)) {
                $users = $users->where('garage', '=', $garage);
                }
                if (!empty($garden)) {                      
                $users =    $users->where('garden', '=', $garden);
                }
                if (!empty($message)) {                      
                $users =    $users->where('message', '=', $message);
                }


                $users = $users->get();



                 return View::make('realestate.externa.listproperty', compact('users','countries'));

                }

1 个答案:

答案 0 :(得分:0)

post方法是必需的,否则Laravel不会使用正确的数据将其重定向到正确的方法。它之前是如何运作的?幸运的是,可能。 :)

Route::get('realestate/listproperty', array(

    'as' =>'sacapropiedades',            
    'uses' =>'countriesregionstownsController@findproperty'       

));

Route::post('realestate/listproperty', array(

    'as' =>'sacapropiedades',            
    'uses' =>'countriesregionstownsController@findproperty'       

));

Route::match(array('GET', 'POST'), 'realestate/listproperty', array(

    'as' =>'sacapropiedades',            
    'uses' =>'countriesregionstownsController@findproperty'       

));

Route::any('realestate/listproperty', array(

    'as' =>'sacapropiedades',            
    'uses' =>'countriesregionstownsController@findproperty'       

));

然后你可能不需要在GET上验证:

if (Request::getMethod() == 'POST')
{
    $validator = Validator::...
} 

编辑:

抱歉,我忽略了这个问题:

不要手动编写FORM标签,而是使用Laravel的FormBuilder类:

<?php Form::open(array('route' => 'sacapropiedades', 'class' => 'form-horizontal', 'id' => 'my_form', 'name' => 'my_form')); ?>

不同之处在于它会为您添加方法,并且还会在表单中添加csrf标记。