0

The Routes 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>

The error is: Undefined variable: user_id (View: D:\laragon\www\SampleContacts\resources\views\adminContacts\index.blade.php)

Am I missing something? The idea is to pass the $user_id to the adminContact.create form where i can use it to set $contact->owner_id = $user_id; so the entered contact apears under that users table.

1

3 Answers 3

1

I don't think you can pass variables into your view like you're doing now.

In your controller, try changing this line:

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

To this:

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

Sign up to request clarification or add additional context in comments.

1 Comment

If I do change it to the above I get a different error: Missing required parameters for [Route: adminContacts.index] [URI: adminContacts/{user_id}]. (View: D:\laragon\www\SampleContacts\resources\views\adminContacts\index.blade.php)
1

You could explicitly name the variable when passing it to the view, either this way

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

Or

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

I'm not sure what the name of the variable becomes when passed to the view via withUserId, but I'm guessing this is the issue.

Comments

0

Found the problem.

@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

Anywhere where there is a {{ route('adminContacts.index') }} it also needed the $user_id to be passed along with it because I'm also using it in the routes as '/adminContacts/{user_id}'

Thank you for all the help.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.