URL


Einführung

Grundlegend
  • Basis-URL generieren
  • Zugriff aktuell URL
    • Benannte Routen-URL
    Signierte URL
    • Controller-Verhalten URL
    Standardwert
Einführung

Laravel bietet mehrere Hilfsfunktionen zum Generieren von URLs für Anwendungen. Wird hauptsächlich zum Erstellen von URLs in Vorlagen und API-Antworten oder zum Generieren von Weiterleitungsantworten in anderen Teilen der Anwendung verwendet.

Grundlegend

Generieren Grundlegende URL

Hilfsfunktion kann für jede URL in Ihrer Anwendung verwendet werden. Die generierte URL verwendet automatisch das Schema (HTTP oder HTTPS) und den Host aus der aktuellen Anfrage:

$post = App\Post::find(1);
echo url("/posts/{$post->id}");
// http://example.com/posts/1

url

Auf die aktuelle URL zugreifen

Wenn kein Pfad zur Hilfsfunktion url angegeben wird, wird eine IlluminateRoutingUrlGenerator-Instanz zurückgegeben, um Ihnen den Zugriff auf Informationen über die aktuelle URL zu ermöglichen:

// Get the current URL without the query string...
echo url()->current();
// Get the current URL including the query string...
echo url()->full();
// Get the full URL for the previous request...
echo url()->previous();

oben Auf diese Methoden kann über die URL-Fassade zugegriffen werden Zugriff:

use Illuminate\Support\Facades\URL;
echo URL::current();

URL der benannten Route

Hilfsfunktionroute kann verwendet werden, um eine URL für zu generieren eine vorgegebene Route. Die von einer benannten Route generierte URL ist nicht an die auf der Route definierte URL gekoppelt. Daher ist es bei Änderungen an der URL der Route nicht erforderlich, Änderungen am Funktionsaufruf route vorzunehmen. Angenommen, Ihre Anwendung enthält die folgende Route:

Route::get('/post/{post}', function () { 
   //
})->name('post.show');

Um die URL für diese Route zu generieren, können Sie die Hilfsfunktion route wie folgt verwenden:

echo route('post.show', ['post' => 1]);
// http://example.com/post/1

Normalerweise würden Sie die verwenden Primärschlüssel eines Eloquent-Modells. URL generieren. Daher können Sie Eloquent-Modelle als Parameterwerte übergeben. route Die Hilfsfunktion extrahiert automatisch den Primärschlüssel des Modells:

echo route('post.show', ['post' => $post]);

Die Hilfsfunktion route kann auch zum Generieren von URLs für Routen mit mehreren Parametern verwendet werden:

Route::get('/post/{post}/comment/{comment}', function () { 
   //
})->name('comment.show');
echo route('comment.show', ['post' => 1, 'comment' => 3]);
// http://example.com/post/1/comment/3

Unterschrift URL

Mit Laravel können Sie ganz einfach „signierte“ URLs für benannte Pfade erstellen. Diesen URLs ist ein „signierter“ Hash an die Abfragezeichenfolge angehängt, sodass Laravel überprüfen kann, ob die URL seit ihrer Erstellung nicht geändert wurde. Signierte URLs sind besonders nützlich für Routen, die öffentlich zugänglich sind, aber einen Schutz gegen URL-Manipulation erfordern.

Sie können beispielsweise eine signierte URL verwenden, um einen öffentlichen „Abbestellen“-Link zu implementieren, der per E-Mail an Ihre Kunden gesendet wird. Um eine signierte URL zu erstellen, die auf einen Pfad verweist, verwenden Sie die signedRoute-Methode URL der Fassade:

use Illuminate\Support\Facades\URL;return URL::signedRoute('unsubscribe', ['user' => 1]);

Wenn Sie eine abgelaufene temporäre signierte Routen-URL generieren möchten, können Sie die folgende temporarySignedRoute verwenden Methoden:

use Illuminate\Support\Facades\URL;return URL::temporarySignedRoute( 
   'unsubscribe', now()->addMinutes(30), ['user' => 1]
  );

Signatur-Routing-Anfrage überprüfen

Um zu überprüfen, ob die eingehende Anfrage eine gültige Signatur hat, sollten Sie die übergebene hasValidSignature-Methode aufrufenRequest:

use Illuminate\Http\Request;
Route::get('/unsubscribe/{user}', function (Request $request) { 
   if (! $request->hasValidSignature()) {      
      abort(401);    
    }   
   // ...
})->name('unsubscribe');

Alternativ können Sie der Route IlluminateRoutingMiddlewareValidateSignature Middleware zuweisen. Wenn sie nicht vorhanden ist, sollte dieser Middleware ein Schlüssel im routeMiddleware-Array des HTTP-Kerns zugewiesen werden:

/**
 * 应用程序的路由中间件
 *
 * 这些中间件可能被分配给组或单独使用
 *
 * @var array
 */
 protected $routeMiddleware = [ 
    'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
 ];

Nachdem Sie die Middleware im Kern registriert haben, können Sie sie an eine Route anhängen. Wenn die eingehende Anfrage keine gültige Signatur hat, gibt die Middleware automatisch eine 403Fehlerantwort zurück:

Route::post('/unsubscribe/{user}', function (Request $request) { 
   // ...
})->name('unsubscribe')->middleware('signed');

Die Funktion

URL für Controller-Aktionen

action generiert eine URL für eine bestimmte Controller-Aktion. Für diese Funktion müssen Sie nicht den vollständigen Namespace des Controllers übergeben, aber Sie müssen den Controller-Klassennamen relativ zum Namespace übergeben AppHttpControllers:

$url = action('HomeController@index');

Sie können auch „callable“ verwenden. Array-Syntax-Referenzoperation:

use App\Http\Controllers\HomeController;
$url = action([HomeController::class, 'index']);

Wenn die Controller-Methode Routenparameter erfordert, übergeben Sie diese als zweiten Parameter an die Funktion action :

$url = action('UserController@profile', ['id' => 1]);

Standardwert

Für einige Anwendungen möchten Sie vielleicht Der Anforderungsbereich des URL-Parameters gibt einen Standardwert an. Angenommen, einige Routen definieren {locale}-Parameter:

Route::get('/{locale}/posts', function () {    //})->name('post.index');

Es ist auch sehr mühsam, die Hilfsfunktionen locale bis route jedes Mal aufzurufen. Daher ermöglicht die Verwendung der URL::defaults-Methode zum Definieren des Standardwerts dieses Parameters, dass der Parameter immer in der aktuellen Anforderung vorhanden ist. Diese Methode kann dann von der Routing-Middleware aufgerufen werden, um auf die aktuelle Anfrage zuzugreifen:

<?php
  namespace App\Http\Middleware;
  use Closure;use Illuminate\Support\Facades\URL;
  class SetDefaultLocaleForUrls{ 
     public function handle($request, Closure $next) 
        {       
         URL::defaults(['locale' => $request->user()->locale]);        
         return $next($request);    
        }
    }

Sobald der Standardwert des Parameters locale festgelegt ist, müssen Sie ihn nicht mehr über die Hilfsfunktion route übergeben beim Generieren des URL-Werts.

Dieser Artikel wurde zuerst auf der Website LearnKu.com veröffentlicht.