Maison  >  Article  >  développement back-end  >  Explication détaillée de la modification de l'adresse racine de url() dans Laravel

Explication détaillée de la modification de l'adresse racine de url() dans Laravel

*文
*文original
2018-01-03 15:17:242699parcourir

Cet article vous présente principalement les informations pertinentes sur la façon de modifier la fonction url() dans Laravel pour générer l'adresse racine de l'URL. L'article la présente en détail à travers l'exemple de code. Il a une certaine valeur d'apprentissage de référence pour tout le monde. Apprenez ou utilisez Laravel. C'est nécessaire. Amis, veuillez suivre l'éditeur pour apprendre ensemble. J'espère que cela aide tout le monde.

Préface

Cet article vous présente principalement le contenu pertinent de la modification de l'adresse racine de l'URL générée par la fonction url() dans Laravel. Je pense que tout le monde le connaît. Je sais qu'il y a une url() dans la fonction d'assistance de Larevel, qui peut générer une URL complète à partir du répertoire donné :

// return: https://skin.dev/user/profile
url('user/profile')
Mais l'URL générée par cette chose doit être complétée. La partie est automatiquement déterminée en fonction de la requête dans le cadre, et ce qui est automatiquement déterminé se passe parfois mal (par exemple, lorsqu'une couche de proxy inverse est utilisée).

Le document ne mentionne pas comment personnaliser l'adresse racine et la partie en-tête de protocole (http(s)) dans l'URL qu'il génère, ce qui est très frustrant. Alors que devons-nous faire ?

Tout d'abord, regardons où url() est défini :

# File: src/Illuminate/Foundation/helpers.php

/**
 * Generate a url for the application.
 *
 * @param string $path
 * @param mixed $parameters
 * @param bool $secure
 * @return Illuminate\Contracts\Routing\UrlGenerator|string
 */
function url($path = null, $parameters = [], $secure = null)
{
 if (is_null($path)) {
  return app(UrlGenerator::class);
 }

 return app(UrlGenerator::class)->to($path, $parameters, $secure);
}
Comme vous pouvez le voir, il analyse un IlluminateContractsRoutingUrlGenerator du conteneur de service de Laravel, et transférer les paramètres vers la méthode to de cet objet.

La classe UrlGenerator est liée au conteneur de service dans le fournisseur de services src/Illuminate/Routing/RoutingServiceProvider.php :

/**
 * Register the URL generator service.
 *
 * @return void
 */
protected function registerUrlGenerator()
{
 $this->app['url'] = $this->app->share(function ($app) {
  // 略

  $url = new UrlGenerator(
   $routes, $app->rebinding(
    'request', $this->requestRebinder()
   )
  );

  return $url;
 });
}
Cela signifie que vous pouvez accéder à UrlGenerator dans le service conteneur via le résumé de l'url à tout moment et modifiez-le.

Et il expose les méthodes dont nous avons besoin : forceSchema et forceRootUrl.

Le code pour modifier l'adresse racine dans l'URL générée par la fonction url() est le suivant :

// 用它提供的方法检测 URL 是否有效
if (app('url')->isValidUrl($rootUrl)) {
 app('url')->forceRootUrl($rootUrl);
}

// 强制生成使用 HTTPS 协议的 URL
app('url')->forceSchema('https');
Il est recommandé de placer le code ci-dessus dans un ServiceProvider personnalisé. Tous les liens générés par la fonction url() utiliseront l'adresse racine et le protocole définis ci-dessus.

Donc, pour vraiment maîtriser les choses de Laravel, il ne suffit pas de lire la documentation. De plus, la documentation du code source de Laravel est très bonne, elle est très claire à lire et vous pouvez apprendre beaucoup de choses.

Recommandations associées :

Explication détaillée de la façon dont Laravel implémente les tâches planifiées

Explication détaillée de la méthode de Laravel pour implémenter un superviseur pour exécuter des processus asynchrones

Explication détaillée de la console de planification des tâches de Laravel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn