Exception

Entwürfe und Beiträge ohne Berechtigung sperren

Posted on October 24, 2015 in laravel, php

Inhalt

  • Einführung
  • Controller
  • ExceptionHandler
  • View

Einführung

Eigentlich sollte hier der 2. Teil des Kommentarsystems folgen, nur leider ist momentan die Zeit für den etwas komplexeren Artikel nicht vorhanden. Daher als Entschädigung ein kleinerer Artikel zur Exceptionbehandlung.

Bei dem Laravel Beauty Projekt, worauf dieser Blog basiert, gibt es die Möglichkeit Beiträge darzustellen, die noch nicht freigegeben wurden. Der Workaround ist sehr schnell und ohne viel Aufwand gemacht.

Controller

Durch die Prüfung, ob es sich um einen Entwurf handelt und der User eingeloggt ist, kann man schön eine Exception werfen. Die ModelNotFoundException ermöglicht quasi einen 404, dass der Beitrag nicht vorhanden ist.

// app\Http\Controllers\BlogController.php
// Füge in der Funktion showPost 
//      nach ->whereSlug($slug)
//           ->firstOrFail(); folgendes ein

            if($post->is_draft == 1 && Auth::check() === false)
            {
                throw new ModelNotFoundException();
            }

// Falls das Kommentarsystem genutzt wird, dann bitte vor
//             $post->comments = approved($post->comments, true);
//             $post->replies = approved($post->replies, true);

ExceptionHandler

Durch die Anpassung der Rendermethode wird es möglich eine individuelle view für die Exception zu erstellen / nutzen.

// App/Exceptions/Handler
// Am Anfang einfügen

use Illuminate\Database\Eloquent\ModelNotFoundException;

// Render auf folgendes anpassen 

/**
 * Render an exception into an HTTP response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Exception  $e
 * @return \Illuminate\Http\Response
 */
public function render($request, Exception $e)
{
    if($e instanceof ModelNotFoundException)
    {
        return response()->view('errors.custom', compact('e'));
    }
    return parent::render($request, $e);
}

View

Es sind alle Informationen vorhanden. Durch die Erstellung von custom.blade.php ist eine individuelle Fehlerausgabe möglich. Sie kann natürlich angepasst und optimiert werden.

// resources/views/errors/custom.blade.php

@extends('blog.layouts.error')

@section('page-header')
    <header class="intro-header" style="background-image: url('{{ page_image(null) }}')">
        <div class="container">
            <div class="row">
                <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
                    <div class="post-heading">
                        <h1>Error</h1>
                        <h2 class="subheading">The page you are requested has caused an error. Please check the message for more details.</h2>
                    </div>
                </div>
            </div>
        </div>
    </header>
@stop

@section('content')
    <div class="container">
        <div class="row">
            <div class="col-lg-8 col-lg-offset-2 col-md-10 col-md-offset-1">
               Your Article was not found on this Site.
            </div>

        </div>
    </div>
@stop

Kurz und knapp. Für Anregungen oder Fehler schreibt einfach einen kleinen Kommentar. Bin für jede Verbesserung oder aber auch für jeden Vorschlag offen.

Viele Grüße

_ Cyrix _

This article has no comments. You can leave the first comment.