Laravel Table Filters - PullRequest
       15

Laravel Table Filters

0 голосов
/ 15 января 2019

Я пытаюсь реализовать фильтры для таблицы в моем приложении Laravel.Например, у меня есть таблица «Заказы» со столбцом «Статус заказа».Мне нужна кнопка, которую я могу нажать, чтобы видеть все доставленные заказы (кроме отложенных).Я попробовал дать мне пустую страницу и измененный URL.Это то, что я пытаюсь сделать.

Вид

<form action="{{ action('FilterController@status_filter') }}" method="POST">
    @csrf
    <button type="submit" name="pending" value="1">Pending</button>
    <button type="submit" name="delivered" value="2">Delivered</button>
</form>

@if(count ($info) > 0)
    <table>
        <thead>
        <th>orderNumber</th>
        <th>orderDate</th>
        <th>shippedDate</th>
        <th>status</th>
        <th>comments</th>
        <th>customerNumber</th>
        </thead>
        @foreach ($info as $info)
            <tr>
                <td>{{ $info->orderNumber }}</td>
                <td>{{ $info->orderDate }}</td>
                <td>{{ $info->shippedDate }}</td>
                <td>{{ $info->status }}</td>
                <td>{{ $info->comments }}</td>
                <td>{{ $info->customerNumber }}</td>
            </tr>
    @endforeach
@endif

Контроллер

<?php

public function status_filter(Request $request)
{
    $filter = FilterModel::where('status', true);

    if ($request->has('1')) {
        $filter->where('status', $pending);
    }

    if ($request->has('2')) {
        $filter->where('status', $delivered);
    }

     return $filter->get();

    return redirect('filter', ['filter' => $filter]);

}

Маршрут

 Route::post('status_filter', 'FilterController@status_filter');

Модель:

 class FilterModel extends Model
 {
protected $table = 'orders';
protected $primarykey = 'orderNumber';
 }

Схема таблицы:

Table Schema

Ответы [ 4 ]

0 голосов
/ 15 января 2019

Пожалуйста, попробуйте это в вашем контроллере

public function status_filter(Request $request) {
    $status = $request->status;
    $return FilterModel::where('status', $status)->get();
}

и ваша форма

<form action="{{ action('FilterController@status_filter') }}" method="POST">
    @csrf
    <button type="submit" name="status" value="pending">Pending</button>
    <button type="submit" name="status" value="delivered">Delivered</button>
</form>
0 голосов
/ 15 января 2019

Вы делаете запрос POST.При каждом запросе POST Laravel проверяет токен CSRF, который он не найдет в вашем запросе POST, поскольку в вашей форме отсутствует токен CSRF.Ваша форма

<form action="{{ action('FilterController@status_filter') }}" method="POST">
     <button type="submit" name="pending" value="1">Pending</button>
     <button type="submit" name="delivered" value="2">Delivered</button>
</form>

и должна быть

<form action="{{ action('FilterController@status_filter') }}" method="POST">
     @csrf
     <button type="submit" name="pending" value="1">Pending</button>
     <button type="submit" name="delivered" value="2">Delivered</button>
</form>

. Существует несколько способов добавить токен CSRF

  • {!!csrf_field () !!}
  • @ csrf
  • <input type="hidden" name="_token" id="csrf-token" value="{{ Session::token() }}" />
0 голосов
/ 15 января 2019

Вы показываете только пустую страницу, потому что ваш метод возвращает некоторые данные, а не представление. Вам необходимо отобразить представление или перенаправить с помощью метода перенаправления

См. Документацию здесь

0 голосов
/ 15 января 2019

Почтовые запросы по умолчанию защищены csrf . Используйте @csrf, чтобы добавить токен csrf в форму.

<form action="{{ action('FilterController@status_filter') }}" method="POST">
    @csrf
    <button type="submit" name="pending" value="1">Pending</button>
    <button type="submit" name="delivered" value="2">Delivered</button>
</form>
...