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 403
Fehlerantwort 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.