Маршруты Route::get('/adminContacts/{user_id}', 'AdminContactsController@index')->name('adminContacts.index')->middleware('is_admin'); Route::get('/adminContacts/{user_id}/create', 'AdminContactsController@create')->name('adminContacts.create')->middleware('is_admin');

AdminContactController

public function index($user_id)
{
    // Confirm User exists
    User::findOrFail($user_id);

    $filter = request('filter', NULL);
    $contacts = NULL;

    if ($filter == NULL)
        $contacts = Contacts::query()->where('owner_id', $user_id)->sortable()->paginate(5);
    else
    $contacts = Contacts::query()->where('owner_id', $user_id)->where('name', 'like', '%'.$filter.'%')
                                 ->orWhere('number', 'like', '%'.$filter.'%')
                                 ->sortable()->paginate(5);

    return view('adminContacts.index')->withContacts($contacts)->withUserId($user_id);
}

/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create($user_id)
{
    return view('adminContacts.create')->withUserId($user_id);
}

Index.blade.php

<div class="container">
    <h1 class="jumbotron">Sample Phone Book</h1>

    <a href="{{ route('adminContacts.create', ['user_id' => $user_id] ) }}" class="btn btn-primary btn-block" style="margin-bottom: 5px">Add Contact</a>
</div>

<!--Search Field -->
<div class="container">
    <form method="GET" action="{{ route('adminContacts.index') }}">
        <input type="text" name='filter' class='input' placeholder='Search' value="{{ request('filter') }}">
            @if (request('filter'))
                <a class="btn btn-primary btn-sm" href="{{ route('adminContacts.index') }}">X</a>
            @endif
    </form>
</div>

<!-- Table -->
<div class="container">
    <div class="row" >
        <table class="table table-hover" id="contactsTable">
            <thead>
                <tr>
                    <th>#</th>
                    <th>@sortablelink('name', 'Contact Name')</th>
                    <th>@sortablelink('number', 'Phone Number')</th>
                    <th>
                        <button class="btn btn-primary btn-sm">Prepend</button>
                    </th>
                </tr>
            </thead>

        <!--Loop through all the cutomers and output them on the table-->
        @foreach($contacts as $contact)
            <tbody>
                <tr>
                    <td>{{ $contact->id }}</td>
                    <td>{{ $contact->name }}</td>
                    <td>{{ $contact->number }}</td> 
                    <td>
                        <a href="{{ route('adminContacts.edit', $contact->id) }}" class="btn btn-primary btn-sm">View</a>   
                    </td>
                </tr>
            </tbody>
        @endforeach
        </table>

        {!! $contacts->appends(\Request::except('page'))->render() !!}
    </div>  
</div>

Ошибка: неопределенная переменная: user_id (представление: D: \ laragon \ www \ SampleContacts \ resources \ views \ adminContacts \ index.blade.php)

Я что-то пропустил? Идея состоит в том, чтобы передать $ user_id в форму adminContact.create, где я могу использовать его для установки $ contact-> owner_id = $ user_id; таким образом, введенный контакт отображается под этой таблицей пользователей.

0
Commander Spuds 21 Ноя 2018 в 17:57

3 ответа

Лучший ответ

Нашел проблему.

@extends('layouts.app')

@section('content')

<div class="container">
    <h1 class="jumbotron">Sample Phone Book</h1>

    <a href="{{ route('adminContacts.create', ['user_id' => $user_id] ) }}" class="btn btn-primary btn-block" style="margin-bottom: 5px">Add Contact</a>
</div>

<!--Search Field -->
<div class="container">
    <form method="GET" action="{{ route('adminContacts.index', $user_id) }}">
        <input type="text" name='filter' class='input' placeholder='Search' value="{{ request('filter') }}">
            @if (request('filter'))
                <a class="btn btn-primary btn-sm" href="{{ route('adminContacts.index',  $user_id) }}">X</a>
            @endif
    </form>
</div>

<!-- Table -->
<div class="container">
    <div class="row" >
        <table class="table table-hover" id="contactsTable">
            <thead>
                <tr>
                    <th>#</th>
                    <th>@sortablelink('name', 'Contact Name')</th>
                    <th>@sortablelink('number', 'Phone Number')</th>
                    <th>
                        <button class="btn btn-primary btn-sm">Prepend</button>
                    </th>
                </tr>
            </thead>

        <!--Loop through all the cutomers and output them on the table-->
        @foreach($contacts as $contact)
            <tbody>
                <tr>
                    <td>{{ $contact->id }}</td>
                    <td>{{ $contact->name }}</td>
                    <td>{{ $contact->number }}</td> 
                    <td>
                        <a href="{{ route('adminContacts.edit', $contact->id) }}" class="btn btn-primary btn-sm">View</a>   
                    </td>
                </tr>
            </tbody>
        @endforeach
        </table>

        {!! $contacts->appends(\Request::except('page'))->render() !!}
    </div>  
</div>

@endsection

Везде, где есть {{ route('adminContacts.index') }}, ему также нужно было передать $user_id вместе с ним, потому что я также использую его в маршрутах как '/adminContacts/{user_id}'

Спасибо за помощь.

0
Commander Spuds 22 Ноя 2018 в 14:16

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

В вашем контроллере попробуйте изменить эту строку:

return view('adminContacts.index')->withContacts($contacts)->withUserId($user_id);

К этому:

return view('adminContacts.index')->with('contacts', $contacts)->with('user_id', $user_id);

1
rpm192 21 Ноя 2018 в 15:10

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

return view('adminContacts.index')->with('user_id', $user_id);

Или же

return view('adminContract.index', compact('user_id'));

Я не уверен, каким будет имя переменной при передаче в представление через withUserId, но я предполагаю, что это проблема.

1
Nick Dawes 21 Ноя 2018 в 15:11