Laravel: перенаправление на тот же маршрут после фильтрации данных - PullRequest
0 голосов
/ 22 мая 2018

У меня есть индексная страница, где я перечисляю все данные, которые у меня есть, и есть также простая форма фильтрации, которая делает запрос 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 не работает в шаблоне блейда, поэтому я не могу отобразить старые данные формы после запроса.В чем может быть проблема с этим?Наконец, как я могу удалить эти дублирующиеся строки в методах index и filter.

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

Любая помощь будет оценена.PS: я не хочу использовать Ajax, Vue.js и т. Д. Я хочу сделать это с Laravel.

1 Ответ

0 голосов
/ 22 мая 2018

Вы также можете использовать фильтр в методе индекса.Нет необходимости создавать другой метод для фильтра.

изменение вида.

<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'));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...