当前位置: 首页 > 知识库问答 >
问题:

Laravel:过滤数据后重定向到同一路由

姬浩渺
2023-03-14

我有一个索引页面,其中列出了我所有的数据,还有一个简单的过滤表单,它向给定的路径发出POST请求

@section('content')

    <h4>Maçlar</h4>

    <form class="form-inline" method="post" action="{{ route('games.filter') }}">
        {{ csrf_field() }}
        <div class="form-group mb-2">
            <label class="sr-only">Email</label>
            <select class="form-control" id="season-select" name="season">
                <option value="0">Tüm Sezonlar</option>
                @foreach ($seasons as $season)
                    <option value="{{$season->id}}" {{old('season') == $season->id ? 'selected' : ''}}>{{$season->season}}</option>
                @endforeach
            </select>
        </div>
        <div class="form-group mx-sm-3 mb-2">
            <label for="week-select" class="sr-only">Password</label>
            <select class="form-control" id="week-select" name="week">
                <option value="0">Tüm Haftalar</option>
                @foreach ($weeks as $week)
                    <option value="{{$week->id}}" {{old('week') == $week->id ? 'selected' : ''}}>{{$week->week}}</option>
                @endforeach
            </select>
        </div>
        <button type="submit" class="btn btn-primary mb-2">Filtrele</button>
    </form>

    <table class="table table-striped">
        <thead>
        <tr>
            <th scope="col">Sezon</th>
            <th scope="col">Hafta</th>
            <th scope="col">Ev Sahibi Takım</th>
            <th scope="col">Misafir Takım</th>
            <th scope="col">Tarih ve Saat</th>
            <th scope="col">Yer</th>
        </tr>
        </thead>
        <tbody>
        @foreach ($games as $game)
            <tr>
                <td>{{$game->season->season}}</td>
                <td>{{$game->week->week}}</td>
                <td>{{@$game->homeTeam->name}}</td>
                <td>{{@$game->awayTeam->name}}</td>
                <td>{{@$game->game_date_time}}</td>
                <td>{{@$game->place}}</td>
            </tr>
        @endforeach
        </tbody>
    </table>

@endsection

在控制器中,我的索引方法如下

public function index()
{
     $seasons = Season::all();
     $weeks = Week::all();
     $games = Game::with('season', 'week', 'homeTeam', 'awayTeam')->get();

     return view('game.index')->with(compact('games', 'seasons', 'weeks'));
}

还有我的过滤方法,它执行POST请求,并将过滤后的数据传递到索引使用的相同视图。

public function filter(Request $request)
{
     $seasons = Season::all();
     $weeks = Week::all();

     $games = Game::with('season', 'week', 'homeTeam', 'awayTeam')
                ->when(request('season') != 0, function ($q) {
                    return $q->where('season_id', request('season'));
                })->when(request('week') != 0, function ($q) {
                    return $q->where('week_id', request('week'));
                })
                ->get();

     return view('game.index')->with(compact('games', 'seasons', 'weeks'));
}

我想学习的是,实施这样一个案例的最佳方式是什么?是否有可能在执行POST过滤请求后重定向回相同的索引路由?并且old方法在刀片模板中不起作用,因此我不能在请求后显示旧表单数据。它有什么问题?最后,我如何删除索引和筛选方法中的这些重复行。

$seasons = Season::all();
$weeks = Week::all();

任何帮助都将不胜感激。附言:我不想使用Ajax,Vue.js等。我想和拉拉维尔一起做。

共有1个答案

马哲
2023-03-14

您也可以在索引方法中使用筛选器。无需为筛选创建另一种方法

改变看法。

<form class="form-inline" method="post" action="{{ route('games.index') }}"> // form redirect to index method

索引方法的变化。

public function index(Request $request)
{
     $seasons = Season::all();
     $weeks = Week::all();

     if($request->has('season') && $request->has('week') ){ // check filter value is passed or not
      $games = Game::with('season', 'week', 'homeTeam', 'awayTeam')
                ->when(request('season') != 0, function ($q) {
                    return $q->where('season_id', request('season'));
                })->when(request('week') != 0, function ($q) {
                    return $q->where('week_id', request('week'));
                })
                ->get();
     }
     else{
        $games = Game::with('season', 'week', 'homeTeam', 'awayTeam')->get();
     }

     return view('game.index')->with(compact('games', 'seasons', 'weeks'));
}
 类似资料:
  • 我是一个新手,希望在筛选之前进行筛选,该筛选将检查我想要的内容,并将带错误或成功的重定向返回到相同的配置文件。 这是我的过滤前函数 这是我的路线 Route::组(数组) 路由::get('/user/{username}',数组('as'= 和我的ProfileController公共功能 所以我的问题是如何让这些重定向工作,我试图搜索谷歌等,我找不到任何答案。这是我在这里的第一篇文章,我的英语

  • 我有一条基本路线,如下所示: 逻辑是我希望仅为数值。我现在要做的是,如果值是非数字的,则声明对此的重定向。假设的输入是。在这种情况下,我希望它重定向到值为的。 我尝试使用,但无法正常工作。它看起来像这样: 我更愿意将重定向放在组内,但如果这是唯一的方法,它可以放在组外。任何帮助都将不胜感激。 发生的情况是,如果我声明了路由重定向,就会出现404错误。 编辑:我想在文件。我知道如何在控制器中执行此操

  • 是否可以将用户重定向到Laravel中的POST路由。我有两张表格。表格一发送到包含表格二的路线,表格二发送到最终路线,然后进行验证。如果

  • 首先,在get请求中,我显示一个表单,在提交表单时,它转到一个post url,在控制器中执行一些操作,然后返回另一个包含表单的视图。提交此表单后,我验证了一些内容,如果验证失败,我想重定向回一些错误,但不幸的是,laravel不允许我重定向回post方法。我有什么办法可以做到这一点吗? 我在laracast上看到过这个答案https://laracasts.com/discuss/channel

  • 我使用Laravel 5.4的项目和场景是,如果没有任何创建然后在登录重定向到页面。 下面是我的路线页编码 目录结构是 下面是我的code 它重定向了太多次,我收到错误消息说。 我在这里做错了什么??

  • 当我在web.php中定义了路由时,我在使用Laravel时遇到了一个路由未定义的错误,如下所示: 我正在从下面的代码重定向到路由 auth()代码可以工作,但当调用重定向时,我得到错误'route[home]not defined'。有没有人知道我怎么解决这个错误。任何帮助都会很好