Génération d'URL


La génération d'URL peut être effectuée à l'aide de la méthode thinkfacadeRoute::buildUrl().

Cette méthode renverra une instance d'objet thinkrouteUrl. Étant donné que la méthode __toString est utilisée, l'adresse de routage peut être générée directement.

echo \think\facade\Route::buildUrl();

Si des données sont renvoyées au client, vous pouvez les convertir en type chaîne avant de les renvoyer.

$url = (string) \think\facade\Route::buildUrl();

Utiliser des identifiants de routage

La définition des expressions d'adresse est différente selon les méthodes d'adresse de routage. Les paramètres sont transmis séparément via le deuxième paramètre. Supposons que nous définissions une règle de routage comme suit :

Route::rule('blog/:id','index/blog/read');

En l'absence de spécification d'un identifiant de routage, l'adresse de routage peut être utilisée directement pour générer l'adresse URL :

Route::buildUrl('index/blog/read', ['id' => 5, 'name' => 'thinkphp']);

Si nous enregistrent l'itinéraire Lorsque l'identifiant de routage est spécifié

Route::rule('blog/:id','index/blog/read')->name('blog_read');

Ensuite, l'identifiant de routage doit être utilisé pour générer l'adresse URL

Route::buildUrl('blog_read', ['id' => 5, 'name' => 'thinkphp']);

Les méthodes ci-dessus généreront l'adresse URL suivante :

/index.php/blog/5/name/thinkphp.html

Si votre environnement prend en charge REWRITE, alors l'adresse URL générée L'adresse URL deviendra :

/blog/5/name/thinkphp.html

Si vous configurez :

'url_common_param'=>true

, alors l'adresse URL générée devient :

/index.php/blog/5.html?name=thinkphp

Les variables qui ne sont pas dans les règles de routage utiliseront directement les paramètres d'URL ordinaires.

Il convient de noter que la génération d'adresse URL ne détecte pas la validité de l'itinéraire, mais génère uniquement des règles de routage qualificatives basées sur l'adresse de routage et les paramètres donnés.

Utiliser des adresses de routage

Nous pouvons également utiliser directement des adresses de routage pour générer des URL, par exemple :

Nous définissons les règles de routage comme suit :

Route::get('blog/:id' , 'blog/read');

Vous pouvez utiliser des règles de routage pour générer des adresses URL directement en utilisant la méthode suivante :

Route::buildUrl('/blog/5');

Ensuite, l'adresse URL générée automatiquement devient :

/index.php/blog/5.html

Suffixe d'URL

Par défaut, le système lira automatiquement le paramètre de configuration url_html_suffix comme suffixe d'URL (la valeur par défaut est html), si nous définissons :

'url_html_suffix'   => 'shtml'

Ensuite, l'adresse URL générée automatiquement devient :

/index.php/blog/5.shtml

Si nous définissons la prise en charge de plusieurs suffixes d'URL

'url_html_suffix'   => 'html|shtml'

, le premier suffixe sera utilisé pour générer l'adresse URL, donc l'adresse URL générée automatiquement est toujours :

/index.php/blog/5.html

Si vous le souhaitez à préciser Pour générer un suffixe d'URL, vous pouvez utiliser :

Route::buildUrl('blog/read', ['id'=>5])->suffix('shtml');

Génération de nom de domaine

L'adresse URL générée par défaut n'a pas de nom de domaine Si vous adoptez un déploiement de nom de domaine multi ou souhaitez générer un. Adresse URL avec un nom de domaine, vous devez le passer Entrez le quatrième paramètre. Ce paramètre a deux utilisations :

Générer automatiquement un nom de domaine

Route::buildUrl('index/blog/read',  ['id'=>5])
    ->suffix('shtml')
    ->domain(true);

Si le quatrième paramètre est passé en vrai, cela signifie générer automatiquement un nom de domaine. . Si vous activez url_domain_deploy, il identifiera également automatiquement le nom de domaine qui correspond à la règle d'URL actuelle.

Par exemple, nous avons enregistré les informations de routage du nom de domaine comme suit :

Route::domain('blog','index/blog');

Ensuite, l'adresse URL ci-dessus est générée comme :

http://blog.thinkphp.cn/read/id/5.shtml

Spécifiez le nom de domaine

Vous pouvez également transmettre explicitement le nom de domaine qui a besoin pour générer l'adresse, par exemple :

Route::buildUrl('blog/read', ['id'=>5])->domain('blog');

Ou passer le nom de domaine complet

Route::buildUrl('index/blog/read', ['id'=>5])->domain('blog.thinkphp.cn');

L'adresse URL générée est :

http://blog.thinkphp.cn/read/id/5.shtml

Vous pouvez également passer le nom de domaine directement dans le premier paramètre, par exemple :

Route::buildUrl('index/blog/read@blog',  ['id'=>5]);
Route::buildUrl('index/blog/read@blog.thinkphp.cn',  ['id'=>5]);

Générer un point d'ancrage

Prend en charge la génération d'ancres d'URL Cliquez, vous pouvez l'utiliser directement dans le paramètre d'adresse URL :

Route::buildUrl('index/blog/read#anchor@blog', ['id'=>5]);

Lorsque vous utilisez ensemble des points d'ancrage et des noms de domaine, faites attention au point d'ancrage devant et au nom de domaine à l'arrière.

L'adresse URL générée est :

http://blog.thinkphp.cn/read/id/5.html#anchor

plus le fichier d'entrée

Parfois, l'adresse URL que nous générons devra peut-être ajouter index.php ou supprimer index.php. La plupart du temps, le système jugera automatiquement. Si trouvé S'il y a un problème avec l'adresse générée automatiquement, vous pouvez utiliser la méthode suivante :

Route::buildUrl('index/blog/read', ['id'=>5])->root('/index.php');

Fonction assistant

Le système fournit une fonction assistant url pour compléter la même fonction, par exemple :

url('index/blog/read', ['id'=>5])->suffix('html')->domain(true)->root('/index.php');