Tiago
Tiago

Reputation: 4480

Accessing user database info within a view in Laravel

I'm trying to create a dynamic navigation bar on my Laravel project, that, if the user is logged in, outputs Hello, {{$user->name}}!.

This, however, is not working.

If I try to add that $user->name variable to my navbar layout I simply get the following error: Undefined variable: user (View: C:\xampp\htdocs\laravel\app\views\layout\navbar.blade.php).

This layout is included in the main layout like so: @include('layout.navbar') and the code is as follows:

<nav class="navbar navbar-default">
    <div class="container-fluid">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" id="logo" href="{{URL::route('home')}}">asd</a>
            <ul class="nav navbar-nav">
                @if(Auth::check())
                <li>
                    <a>Hello, {{$user->name}}!</a>
                </li>
                @endif
            </ul>
        </div>
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav navbar-right">
                @if(Auth::check())
                <li>
                    <a href="{{URL::route('profile', $user->name)}}">Profile</a>
                </li>
                <li>
                    <a href="{{URL::route('account-logout')}}">Logout</a>
                </li>                
                @else
                <li>
                    <a href="{{URL::route('account-login')}}">Login</a>
                </li>
                <li>
                    <a href="{{URL::route('account-create')}}">Register</a>
                </li>                
                @endif
            </ul>
        </div><!-- /.navbar-collapse -->
    </div><!-- /.container-fluid -->
</nav>

What is the correct way to access a user object (with the information of the user that is currently logged in) within this context?

Upvotes: 1

Views: 1335

Answers (2)

Kalhan.Toress
Kalhan.Toress

Reputation: 21901

if your trying to access logged user data like,

$user->name

then you need to pass the logged user in to the blade view from the controller as,

retun View::make("pathAndNameOfBladeFile")->with(Array("user" => Auth::user()));

and change the @if(Auth::check()) in to @if($user) in the blade view

-- OR

in the top of the blade file add this, (put this before using the $user in your code)

@if(Auth::check())
    <?php $user = Auth::user(); ?>
@endif

-- OR

you can do like something @karrde00 suggested in the answer.

The cleaner why to do this is pass the $user from the controller.

Upvotes: 3

karrde00
karrde00

Reputation: 57

You are going to want to use something like {{ Auth::user()->name }} in Laravel. It will give you the logged in user for the view in a Blade template.

Upvotes: 1

Related Questions