Как передать имя столбца кнопкой laravel? - PullRequest
0 голосов
/ 23 января 2020

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

Маршрут

Route::get('/sort', 'ContactController@sort')->name('contacts.sort');
Route::get('/sortDesc', 'ContactController@sortDesc')->name('contacts.sortDesc');

index.blade. php

@extends('layouts.master')

@section('content')

<div class="container">
    <div>
        <div style="margin-top:10px;">
            <h3>Contacts</h3>
        </div>
        <div style="margin-top:10px; margin-bottom:10px;">
            <a class="btn btn-sm btn-success" href="{{ route('contacts.create') }}">Create New Contact</a>
        </div>
    </div>

    <div class="table-responsive">
    <table class="table table-hover">
        <tr class="row" style="text-align:center">
            <th class="col-sm-1"><button type="submit" class="btn" href="{{ route('contacts.sort', ['column' => 'firstName'] )}}">First Name</button></th>
            <th class="col-sm-2"><button type="submit" class="btn" href="{{ route('contacts.sort', ['column' => 'lastName'] )}}">Last Name</button></th>
            <th class="col-sm-2"><button type="submit" class="btn" href="{{ route('contacts.sort', ['column' => 'email'] )}}">Email</button></th>
            <th class="col-sm-1"><button type="submit" class="btn" href="{{ route('contacts.sort', ['column' => 'phone'] )}}">Phone</button></th>
            <th class="col-sm-1"><button type="submit" class="btn" href="{{ route('contacts.sort', ['column' => 'birthday'] )}}">Birthday</button></th>
            <th class="col-sm-4">Action</th>
        </tr>
        <tbody>
        @foreach ($contacts as $key => $value)
            <tr class="row" style="text-align:center">
                {{--  Need to add in sort functions for each catagory --}}
                <td class="col-sm-1">{{$value->firstName}}</td>
                <td class="col-sm-2">{{$value->lastName}}</td>
                <td class="col-sm-2">{{$value->email}}</td>
                <td class="col-sm-1">{{$value->phone}}</td>
                <td class="col-sm-1">{{$value->birthday}}</td>
                <td class="col-sm-4">
                    <form action="{{ route('contacts.destroy', $value->id) }}" method="post">
                        <a class="btn btn-sm btn-success" href="{{ route('contacts.show', $value->id)}}">Show</a>
                        <a class="btn btn-sm btn-warning" href="{{ route('contacts.edit', $value->id)}}">Edit</a>
                        <a class="btn btn-sm btn-second" href="{{ route('contacts.createAddress', ['contact_id' => $value->id])}}">Add Address</a>
                        @csrf
                        @method('DELETE')
                        <button type="submit" class="btn btn-sm btn-danger">Delete</button>
                    </form>
                </td>
            </tr>
        @endforeach 
        </tbody>
    </table>
    </div>
    {{ $contacts->links() }}
</div>
@endsection 

Контроллер контактов

    public function sort( Request $request)
    {
        dump($request);
        $column = $request->column;
        $contacts = DB::table('contacts')->orderBy($column)->simplePaginate(10);
        return view('contacts.sort', ['contacts' => $contacts]);
}

Когда я нажимаю кнопку, ничего не происходит. Я ничего не получил из дампа и сеть не показывает никаких действий с кнопки.

Заранее спасибо

Ответы [ 4 ]

0 голосов
/ 23 января 2020

измените свою кнопку на тег, подобный этому

<th class="col-sm-1"><a type="submit" class="btn" href="{{ route('contacts.sort', ['column' => 'phone'] )}}">Phone</a></th>

Тогда ваш маршрут должен быть таким, как этот

Route::get('/sort/{column}', 'ContactController@sort')->name('contacts.sort');
Route::get('/sortDesc/{column}', 'ContactController@sortDesc')->name('contacts.sortDesc');

, затем в вашем контроллере, так как вы используете запрос get, затем удалите $ запрос на параметр вашей функции сортировки и измените на

public function sort($column)
{
    dump($column);
    $contacts = DB::table('contacts')->orderBy($column)->simplePaginate(10);
    return view('contacts.sort', ['contacts' => $contacts]);
}
0 голосов
/ 23 января 2020

Используйте тег привязки вместо кнопки и передайте значение параметра сортировки в URL.

0 голосов
/ 23 января 2020

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

<tr class="row" style="text-align:center">
            <th class="col-sm-1"><a class="btn" href="{{ route('contacts.sort', ['column' => 'firstName'] )}}">First Name</a></th>
            <th class="col-sm-2"><a class="btn" href="{{ route('contacts.sort', ['column' => 'lastName'] )}}">Last Name</a></th>
            <th class="col-sm-2"><a class="btn" href="{{ route('contacts.sort', ['column' => 'email'] )}}">Email</a></th>
            <th class="col-sm-1"><a class="btn" href="{{ route('contacts.sort', ['column' => 'phone'] )}}">Phone</a></th>
            <th class="col-sm-1"><a class="btn" href="{{ route('contacts.sort', ['column' => 'birthday'] )}}">Birthday</a></th>
            <th class="col-sm-4">Action</th>
        </tr>
0 голосов
/ 23 января 2020

Вам нужно определить столбец в вашем маршруте

Route::get('/sort/{column}', 'ContactController@sort')->name('contacts.sort');
Route::get('/sortDesc/{column}', 'ContactController@sortDesc') >name('contacts.sortDesc');

И в вашем контроллере

public function sort($column)
{
    dump($column);
    $contacts = DB::table('contacts')->orderBy($column)->simplePaginate(10);
    return view('contacts.sort', ['contacts' => $contacts]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...