仅当Laravel中的Auth可用时才传递对象

时间:2014-05-29 11:57:52

标签: php laravel

好的,所以我有一个视图作曲家;这基本上从我的桌子'heros'中拉了一排。然后允许我显然使用对象$ hero>无论如何;在页面上。问题是这显然只适用于登录的人。

View::composer(array('home'), function($view)
{
    $view->with('herodata', Hero::where('owner_id', Auth::user()->id)->first());
});

正如其使用

Auth::user()->

在'heros'表中找到正确的行,一旦用户不再登录,就无法访​​问它。因为没有人设置为Auth。

因此我退出时(或任何未登录的人)的错误是:

ErrorException
Trying to get property of non-object

));


//Authenticated group
Route::group(array('before' => 'auth'), function() {

    View::composer(array('home'), function($view)
    {
        $view->with('herodata', Hero::where('owner_id', Auth::user()->id)->first());
    });

如何解决这个问题?

注意:还在学习,我尝试搜索但我没有发现任何可能因为我不确定如何将我的问题写入正确的信号......

编辑:包括home.blade.php

    @extends('layout.main')

@section('content')
    @if(Auth::check())
        <p>Hello, {{{ Auth::user()->username }}}.</p>
            @if($herodata)   
                Your hero:<br> 
                <b>{{ $herodata->hero; }}</b><br>
                <b>Stats:</b> 
                    LvL: {{ $herodata->level }}
                    Exp: {{ $herodata->exp }}
                    HP:  {{ $herodata->hp }}/{{ $herodata->max_hp }}
                    Str: {{ $herodata->str }}


            Atk: {{ $herodata->atk }}
                Def: {{ $herodata->def }}
                Int: {{ $herodata->int }}
                Blk: {{ $herodata->blk }}

            <form action="{{ URL::route('hero-delete') }}" method="POST">
                <input type="submit" value="Delete"><br>
            </form>
            <form action="{{ URL::route('rest') }}" method="POST">
                <input type="submit" value="Rest">
            </form>
            <form action="{{ URL::route('attack') }}" method="POST">
                <input type="submit" value="Random attack">
            </form>
            <form action="{{ URL::route('hero-died') }}" method="POST">
                <input type="submit" value="Died">
            </form>
        @else
            <form action="{{ URL::route('hero-create') }}" method="POST">
                Hero:<br>
                You do not have a hero, create one!
                <input type="text" name="hero">
                <input type="submit" value="Create hero">

                @if($errors->has('hero'))
                    {{ $errors->first('hero')}}
                @endif

                {{ Form::token()}}
            </form>
        @endif
@else
    <p>You are not signed in.</p>
@endif

@stop

1 个答案:

答案 0 :(得分:1)

在设置英雄数据之前检查用户是否已登录:

if (Auth::check())
{
    View::composer(array('home'), function($view)
    {
        $view->with('herodata', Hero::where('owner_id', Auth::user()->id)->first());
    });
}