laravel得到形式不会被触发

时间:2016-09-28 06:04:34

标签: php forms laravel get

我尝试为我的网站创建一个高级搜索,但是当我提交表单时,网址没有更改并且卡在加载中但是如果我在网址中写/media/search?s=name&type=video它就可以了! 问题是什么?

路线:

 Route::get('/media/search','MediaController@search');

视图:

     <form class="col-lg-4" method="get" action="/media/search">
            <div class="search-filter bordered">
                <div class="search-label uppercase">کلمه کلیدی</div>
                <div class="input-icon right">
                    <i class="icon-magnifier"></i>
                    <input type="text" name="s" class="form-control" placeholder=""> </div>
                <div class="search-label uppercase">نوع محتوا</div>
                <select name="type" class="form-control">
                    <option value="all"><b> همه نوع محتوا</b></option>
                    <option value="image">عکس</option>
                    <option value="voice">صدا</option>
                    <option value="video">فیلم</option>
                    <option value="note">متن</option>
                </select>
                <div class="search-label uppercase">دسته بندی ها</div>
                <select name="category" class="form-control">
                    <option value="all"><b> همه نوع محتوا</b></option>
                    <option value="image">عکس</option>
                    <option value="voice">صدا</option>
                    <option value="video">فیلم</option>
                    <option value="note">متن</option>
                </select>

                <input value="جستجو" type="submit" class="btn green bold uppercase btn-block">
            </div>
        </form>

和控制器:

public function search(Request $request){
    $medias = Media::query();
    if($request->get('s')){
        $s = $request->get('s');
        $medias->where('desc','like','%'.$s.'%')->orWhere('name','like','%'.$s.'%');
    }
    if ($request->get('type')) {
        $type = $request->get('type');
        if ($type == 'image') {
            $medias->where('format', 'like', 'jpg');
        }
        if ($type == 'voice') {
            $medias->where('format', 'like', '3gp');
        }
        if ($type == 'video') {
            $medias->where('format', 'like', 'mp4');
        }
        if ($type == 'note') {
            $medias->where('format', 'like', 'txt');
        }
    }

    $medias = $medias->get();

    return view('media.search')->with(compact('medias','tags','categories'));
}

3 个答案:

答案 0 :(得分:1)

我认为最好使用post方法提交表单,并按照以下方式进行尝试。

Route::post('/media/search',array('use'=>'MediaController@search','as'=>'searchForm'));

在表单标签中使用blading。

<form class="col-lg-4" method="post" action="{!!URL::route('searchForm')!!}">

在您的控制器中

public function search(){
$medias = Media::query();
if(Input::get('s')){
    $s = Input::get('s');
    $medias->where('desc','like','%'.$s.'%')->orWhere('name','like','%'.$s.'%');
}
if (Input::get('type')) {
    $type = Input::get('type');
    if ($type == 'image') {
        $medias->where('format', 'like', 'jpg');
    }
    if ($type == 'voice') {
        $medias->where('format', 'like', '3gp');
    }
    if ($type == 'video') {
        $medias->where('format', 'like', 'mp4');
    }
    if ($type == 'note') {
        $medias->where('format', 'like', 'txt');
    }
}

$medias = $medias->get();

return view('media.search')->with(compact('medias','tags','categories'));

}

答案 1 :(得分:0)

将路线更改为发布方法(路线::发布),它会没问题。

答案 2 :(得分:0)

这样做 路线:

Route::post('/media/search','MediaController@postSearch');

更改表单方法

<form class="col-lg-4" method="POST" action="/media/search">
  <div class="search-filter bordered">
      <div class="search-label uppercase">کلمه کلیدی</div>
      <div class="input-icon right">
          <i class="icon-magnifier"></i>
          <input type="text" name="s" class="form-control" placeholder=""> </div>
      <div class="search-label uppercase">نوع محتوا</div>
      <select name="type" class="form-control">
          <option value="all"><b> همه نوع محتوا</b></option>
          <option value="image">عکس</option>
          <option value="voice">صدا</option>
          <option value="video">فیلم</option>
          <option value="note">متن</option>
      </select>
      <div class="search-label uppercase">دسته بندی ها</div>
      <select name="category" class="form-control">
          <option value="all"><b> همه نوع محتوا</b></option>
          <option value="image">عکس</option>
          <option value="voice">صدا</option>
          <option value="video">فیلم</option>
          <option value="note">متن</option>
      </select>

      <input value="جستجو" type="submit" class="btn green bold uppercase btn-block">
  </div>
</form>

控制器中的发布方法

public function postSearch(Request $request){
  $medias = Media::query();
  if($request->get('s')){
    $s = $request->get('s');
    $medias->where('desc','like','%'.$s.'%')->orWhere('name','like','%'.$s.'%');
  }
  if ($request->get('type')) {
    $type = $request->get('type');
    if ($type == 'image') {
      $medias->where('format', 'like', 'jpg');
    }
    if ($type == 'voice') {
      $medias->where('format', 'like', '3gp');
    }
    if ($type == 'video') {
      $medias->where('format', 'like', 'mp4');
    }
    if ($type == 'note') {
      $medias->where('format', 'like', 'txt');
    }
  }

  $medias = $medias->get();
  return view('media.search')->with(compact('medias','tags','categories'));
}