【问题标题】:laravel get form wont get triggeredlaravel 获取表单不会被触发
【发布时间】:2016-09-28 06:04:34
【问题描述】:

我尝试为我的网站创建高级搜索,但是当我提交表单时,url 没有改变并且卡在加载中,但是如果我在 url 中写 /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'));
}

【问题讨论】:

  • 在form中使用post方式,改变post方式,问题就迎刃而解了

标签: php forms laravel get


【解决方案1】:

我认为最好使用post方法提交表单并尝试如下。

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

在你的表单标签中使用刀片。

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

}

【讨论】:

    【解决方案2】:

    把你的Route改成post方法(Route::post),就OK了。

    【讨论】:

      【解决方案3】:

      这样做 路线:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多