URL-Generierung


Verwenden Sie die Methode thinkfacadeRoute::buildUrl(), um eine URL zu generieren.

Diese Methode gibt eine thinkrouteUrl-Objektinstanz zurück. Da die __toString-Methode verwendet wird, kann die Routing-Adresse direkt ausgegeben werden.

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

Wenn Daten an den Client zurückgegeben werden, können Sie sie vor der Rückgabe in einen String-Typ umwandeln.

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

Routing-Identifikatoren verwenden

Die Definition von Adressausdrücken ist für verschiedene Routing-Adressmethoden unterschiedlich. Die Parameter werden separat über den zweiten Parameter übergeben. Angenommen, wir definieren eine Routing-Regel wie folgt:

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

Wenn keine angegebene Routing-ID vorhanden ist, kann die Routing-Adresse direkt zum Generieren der URL-Adresse verwendet werden:

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

Wenn wir bei der Registrierung der Route die Routing-ID

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

angeben, dann muss die Routing-ID zur Generierung der URL-Adresse

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

Die oben genannten Methoden generieren die folgende URL-Adresse:

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

Wenn Ihre Umgebung REWRITE unterstützt, lautet die generierte URL-Adresse:

/blog/5/name/thinkphp.html

Wenn Sie Folgendes konfigurieren:

'url_common_param'=>true

, dann wird die generierte URL-Adresse zu:

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

Variablen, die nicht in den Routing-Regeln enthalten sind, verwenden direkt normale URL-Parameter.

Es ist zu beachten, dass die URL-Adressgenerierung nicht die Gültigkeit der Route erkennt, sondern nur qualifizierende Routing-Regeln basierend auf der gegebenen Routing-Adresse und den Parametern generiert.

Routing-Adresse verwenden

Wir können die Routing-Adresse auch direkt zum Generieren einer URL verwenden, zum Beispiel:

Wir definieren Routing-Regeln wie folgt :

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

Sie können die folgende Methode verwenden, um mithilfe von Routing-Regeln direkt eine URL-Adresse zu generieren:

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

Dann wird die automatisch generierte URL-Adresse zu:

/index.php/blog/5.html

URL-Suffix

Standardmäßig liest das System automatisch den Konfigurationsparameter url_html_suffix als URL-Suffix (Standard ist HTML), wenn wir Folgendes festlegen:

'url_html_suffix'   => 'shtml'

, dann wird die automatisch generierte URL-Adresse zu:

/index.php/blog/5.shtml

Wenn wir mehrere URs festlegen Das L-Suffix unterstützt

'url_html_suffix'   => 'html|shtml'

, und das erste Suffix wird zum Generieren der URL-Adresse verwendet, sodass die automatisch generierte URL-Adresse immer noch lautet:

/index.php/blog/5.html

, wenn Sie dies angeben möchten Um ein URL-Suffix zu generieren, können Sie Folgendes verwenden:

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

Domänennamengenerierung

Die standardmäßig generierte URL-Adresse enthält keinen Domänennamen verwenden Wenn Sie mehrere Domänennamen bereitstellen oder eine URL-Adresse mit einem Domänennamen generieren möchten, müssen Sie den vierten Parameter übergeben. Dieser Parameter hat zwei Verwendungszwecke:

Automatisch einen Domänennamen generieren

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

Wenn die vier Parameter als „true“ übergeben werden, bedeutet dies, dass der Domänenname automatisch generiert wird. Wenn Sie url_domain_deploy aktivieren, wird automatisch der Domänenname identifiziert, der der aktuellen URL-Regel entspricht.

Zum Beispiel haben wir die Domainnamen-Routing-Informationen wie folgt registriert:

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

Dann wird die obige URL-Adresse generiert als:

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

Geben Sie den Domänennamen an

Sie können den Domänennamen, der zum Generieren der Adresse benötigt wird, auch explizit übergeben, zum Beispiel:

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

oder übergeben das Komplette Die vom Domänennamen

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

generierte URL-Adresse lautet:

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

Sie können den Domänennamen auch direkt im ersten Parameter übergeben, zum Beispiel:

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

Ankerpunkt generieren

Unterstützt das Generieren von URL-Ankerpunkten, die direkt in URL-Adressparametern verwendet werden können:

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

Wenn Sie Ankerpunkte und Domainnamen zusammen verwenden, achten Sie auf den Ankerpunkt vorne und den Domainnamen hinten.

Die generierte URL-Adresse lautet:

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

plus die Eintragsdatei

Manchmal muss der von uns generierten URL-Adresse möglicherweise ein Index hinzugefügt werden. php oder entfernen Sie index.php. In den meisten Fällen ermittelt das System automatisch, Wenn Sie feststellen, dass ein Problem mit der automatisch generierten Adresse vorliegt, können Sie die folgende Methode verwenden:

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

Assistentenfunktion

Das System stellt eine URL bereit Assistentenfunktion, um dieselben Funktionen auszuführen, zum Beispiel:

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