URL


Générer l'URL de base

  • Accéder à l'URL actuelle
  • URL pour la route nommée
    • URL signée
    URL pour l'action du contrôleur
  • Valeur par défaut
  • Introduction
  • Laravel fournit plusieurs fonctions d'assistance pour générer des URL pour les candidatures. Principalement utilisé pour construire des URL dans des modèles et des réponses API ou pour générer des réponses de redirection dans d'autres parties de l'application.

Basic

Générer une URL de base

Fonction auxiliaire
peut être utilisée pour n'importe quelle URL de l'application. L'URL générée utilisera automatiquement le schéma ( HTTP ou HTTPS ) et l'hôte de la requête en cours :
$post = App\Post::find(1);
echo url("/posts/{$post->id}");
// http://example.com/posts/1

Accédez à l'URL actuelle

Si aucun chemin n'est fourni vers la fonction d'assistance url, une instance IlluminateRoutingUrlGenerator sera renvoyée pour vous permettre d'accéder aux informations sur l'URL actuelle : url 提供路径,则会返回一个 IlluminateRoutingUrlGenerator 实例,来允许你访问有关当前 URL 的信息:

// 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();

上面的这些方法都可以通过 URL facade 访问:

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

命名路由的 URL

辅助函数 route 可以用于为指定路由生成 URL。命名路由生成的 URL 不与路由上定义的 URL 相耦合。因此,就算路由的 URL 有任何更改,都不需要对 route 函数调用进行任何更改。例如,假设你的应用程序包含以下路由:

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

要生成此路由的 URL,可以像这样使用辅助函数 route

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

您通常会使用 Eloquent 模型 的主键生成 URL。因此,您可以将 Eloquent 模型作为参数值传递。 route 辅助函数将自动提取模型的主键:

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

辅助函数 route 也可用于为具有多个参数的路由生成 URL:

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

签名 URL

Laravel 允许你轻松地为命名路径创建 「签名」 URL。这些 URL 在查询字符串后附加了 「签名」哈希,允许 Laravel 验证 URL 自创建以来未被修改过。签名 URL 对于可公开访问但需要一层防止 URL 操作的路由特别有用。

例如,你可以使用签名 URL 来实现通过电子邮件发送给客户的公共 「取消订阅」链接。要创建指向路径的签名 URL,请使用 facade  的 signedRoute 方法 URL

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

如果要生成过期的临时签名路由 URL,可以使用以下 temporarySignedRoute 方法:

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

验证签名路由请求

要验证传入请求是否具有有效签名,你应该调用 hasValidSignature 传入的方法 Request

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

或者,你可以将 IlluminateRoutingMiddlewareValidateSignature 中间件分配给路由。如果它不存在,则应该在 HTTP 内核的 routeMiddleware 数组中为此中间件分配一个键:

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

在内核中注册中间件后,你可以将其附加到路由中。如果传入请求没有有效签名,则中间件将自动返回 403

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

Ci-dessus Ces méthodes sont accessibles via la façade URL :

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

URL de la route nommée

La fonction auxiliaire route peut être utilisée pour générer une URL pour une route spécifiée. L'URL générée par une route nommée n'est pas couplée à l'URL définie sur la route. Par conséquent, toute modification apportée à l'URL de la route ne nécessite aucune modification de l'appel de fonction route. Par exemple, supposons que votre application contienne la route suivante : 🎜
use App\Http\Controllers\HomeController;
$url = action([HomeController::class, 'index']);
🎜Pour générer l'URL de cette route, vous pouvez utiliser la fonction d'assistance route comme ceci : 🎜
$url = action('UserController@profile', ['id' => 1]);
🎜Vous générerez généralement l'URL en utilisant la clé primaire d'un modèle Eloquent. Par conséquent, vous pouvez transmettre des modèles Eloquent comme valeurs de paramètres. La fonction d'assistance route extraira automatiquement la clé primaire du modèle : 🎜
Route::get('/{locale}/posts', function () {    //})->name('post.index');
🎜La fonction d'assistance route peut également être utilisée pour générer des URL pour des itinéraires avec plusieurs paramètres : 🎜
<?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);    
        }
    }
🎜🎜🎜
🎜🎜URL signées🎜🎜Laravel vous permet de créer facilement des URL "signées" pour les chemins nommés. Ces URL ont un hachage « signé » ajouté à la chaîne de requête, permettant à Laravel de vérifier que l'URL n'a pas été modifiée depuis sa création. Les URL signées sont particulièrement utiles pour les routes accessibles au public mais nécessitent une couche de protection contre la manipulation d'URL. 🎜🎜Par exemple, vous pouvez utiliser une URL signée pour mettre en œuvre un lien public de « désabonnement » qui est envoyé par e-mail à vos clients. Pour créer une URL signée pointant vers un chemin, utilisez la méthode signedRoute de la façade URL : 🎜rrreee🎜 Si vous souhaitez générer une URL de route signée temporaire expirée, vous pouvez utiliser le Méthode temporarySignedRoute suivante : 🎜rrreee
🎜

Vérifier la demande de routage de signature

🎜Pour vérifier que la demande entrante a un valide signature, vous devez appeler hasValidSignature transmis à la méthode Request : 🎜rrreee🎜 Alternativement, vous pouvez attribuer le middleware IlluminateRoutingMiddlewareValidateSignature à la route. S'il n'existe pas, ce middleware doit se voir attribuer une clé dans le tableau routeMiddleware du core HTTP : 🎜rrreee🎜Après avoir enregistré le middleware dans le core, vous pouvez l'attacher à une route. Si la requête entrante n'a pas de signature valide, le middleware renverra automatiquement une réponse d'erreur 403 : 🎜rrreee🎜🎜🎜🎜🎜🎜

URL pour les actions du contrôleur

La fonction action peut générer une URL pour une action de contrôleur donnée. Cette fonctionnalité ne vous oblige pas à transmettre l'espace de noms complet du contrôleur, mais vous devez transmettre le nom de la classe du contrôleur par rapport à l'espace de noms AppHttpControllers : action 功能可以为给定的控制器行为生成 URL。这个功能不需要你传递控制器的完整命名空间,但你需要传递相对于命名空间 AppHttpControllers 的控制器类名:

rrreee

你还可以使用 “可调用” 数组语法引用操作:

rrreee

如果控制器方法需要路由参数,那就将它们作为第二个参数传递给 action 函数:

rrreee

默认值

对于某些应用程序,你可能希望为某些 URL 参数的请求范围指定默认值。例如,假设有些路由定义了 {locale} 参数:

rrreee

每次都通过 locale 来调用辅助函数 route 也是一件很麻烦的事情。因此,使用 URL::defaults 方法定义这个参数的默认值,可以让该参数始终存在当前请求中。然后就能从 路由中间件 调用此方法来访问当前请求:

rrreee

一旦设置了 locale 参数的默认值,您就不再需要通过辅助函数 routerrreee

Vous pouvez également utiliser le tableau "callable" syntaxe pour référencer l'opération :
🎜
🎜🎜Valeurs par défaut🎜🎜Pour certaines applications, vous souhaiterez peut-être spécifier des valeurs par défaut pour la portée de la requête de certains paramètres d'URL. Par exemple, supposons que certaines routes définissent le paramètre {locale} : 🎜rrreee🎜Appeler la fonction auxiliaire route via locale à chaque fois est également une chose très gênante. Par conséquent, l'utilisation de la méthode URL::defaults pour définir la valeur par défaut de ce paramètre permet au paramètre de toujours exister dans la requête en cours. Cette méthode peut ensuite être appelée depuis le middleware de route pour accéder à la requête en cours : 🎜rrreee🎜 Une fois la valeur par défaut du paramètre locale définie, vous n'avez plus besoin de passer la fonction d'assistance route Passez sa valeur lors de la génération de l'URL. 🎜🎜Cet article a été publié pour la première fois sur le site 🎜LearnKu.com🎜. 🎜🎜