2016-06-09 3 views
0

Ich erstelle einen Blog, aber wenn der Benutzer signiert ist, bedeutet das, dass er authentifiziert ist, kann ich die Beiträge in meinem Dashboard sehen. allerdings, wenn ich unterzeichnet und auf dem Armaturenbrett umgeleitet ich erhalte eine Fehlermeldung, dass „der Versuch, Eigentum von nicht-Objekt zu erhalten ........“Ich erhalte einen Fehler, wenn ich versuche, Beiträge zu veröffentlichen, wenn der Benutzer nicht in Laravel angemeldet ist 5.2

unten ist mein Code

public function getDashboard() { 
     $posts = Post::orderBy('created_at', 'desc')->get(); 
     return view('welcome, [ 
       'posts' => $posts, 
       'user' => Auth::user() 
     ]); 
} 

@foreach($posts as $post) 
      <div class="post-preview" data-postid="{{ $post->id }}"> 
       <a href="#"> 
        <h2 class="post-title"> 
         {{ $post->header }} 
        </h2> 
        <h3 class="post-subtitle"> 
         {{ $post->body }} 
        </h3> 
       </a> 
       <p class="post-meta">Posted by <a href="#">{{ $post->user->username }}</a> on {{ $post->created_at }}</p> 
      </div> 
      <hr> 
      @endforeach 

Bitte Hilfe.

Dank

+3

Sie gestutzt nicht die Fehlermeldung, Sie haben den wichtigsten Teil weggelassen, um ihn zu finden –

+0

Haben Sie sich auf Ihren Benutzer obje bezogen Aus Ihrer Sicht? 'user' => Auth :: user() sieht so aus, was es verursacht, wenn Sie nicht eingeloggt sind – SteD

+0

@SteD Ja ich verwende das Benutzerobjekt wie im Code gezeigt, um den Benutzer anzuzeigen, der den Beitrag veröffentlicht hat. wie '{{$ post-> user-> username}}' und ich bin mir sicher, dass das Auth :: user() das Problem verursacht. Wie auch immer ich nicht sicher bin, wie man es löst – edmond

Antwort

0

Sie müssen nur überprüfen, ob Benutzer in

in Template-Datei protokolliert:

@if($user) 
    @foreach($posts as $post) 
     <div class="post-preview" data-postid="{{ $post->id }}"> 
      <a href="#"> 
       <h2 class="post-title"> 
        {{ $post->header }} 
       </h2> 
       <h3 class="post-subtitle"> 
        {{ $post->body }} 
       </h3> 
      </a> 
      <p class="post-meta">Posted by <a href="#">{{ $post->user->username }}</a> on {{ $post->created_at }}</p> 
     </div> 
     <hr> 
    @endforeach 
@endif 

oder in Controller-Datei:

public function getDashboard() { 
     $posts = Post::orderBy('created_at', 'desc')->get(); 
     return view('welcome', [ 
       'posts' => (Auth::user()) ? $posts : [], 
       'user' => Auth::user() 
     ]); 
} 
+0

Das löste es nicht. Ich möchte, dass nicht autorisierte Benutzer auch die Posts sehen. – edmond

+0

Das ist falsch, wenn $ post ein Array ist, kann man nicht darauf als Objekt zugreifen. –

+0

@DamenPirsy Wenn $ post ein leeres Array ist, wird die Schleife nicht ausgeführt, daher funktioniert dieser Code auch gut: 'foreach ([] as $ a) echo $ a-> b;' (ohne Fehler) – David

Verwandte Themen