tp5.1-ルーティング-URL生成
6541 ワード
ThinkPHPは、ルーティングURLアドレスの統合生成をサポートし、すべてのルーティング方式をサポートし、ルーティング定義や変更のためにURL生成を変更することなく、ルーティングアドレスの反転解析を完璧に解決します.
ルーティング遅延解析をオンにすると、すべてのルーティングアドレスの反転解析をサポートするには、ルーティングマッピングキャッシュを生成する必要があります.
URLは、
Url::build('アドレス式',['パラメータ'],['URL接尾辞'],['ドメイン名'])
url('アドレス式',['パラメータ'],['URL接尾辞'],['ドメイン名'])
異なるルーティングアドレス方式を使用する場合、アドレス式の定義は異なります.パラメータは2番目のパラメータによって単独で入力され、ルーティングルールを定義したとします.
URLアドレスを生成するには、次の方法を使用します.
モジュール/コントローラ/アクションを使用して生成
ルーティング遅延解析をオンにすると、すべてのルーティングアドレスの反転解析をサポートするには、ルーティングマッピングキャッシュを生成する必要があります.
URLは、
\think\facade\Url::build()
メソッドまたはシステムによって提供されるアシスタント関数url()
を使用して生成され、パラメータは一致する.Url::build('アドレス式',['パラメータ'],['URL接尾辞'],['ドメイン名'])
url('アドレス式',['パラメータ'],['URL接尾辞'],['ドメイン名'])
アドレス式とパラメータ
異なるルーティングアドレス方式を使用する場合、アドレス式の定義は異なります.パラメータは2番目のパラメータによって単独で入力され、ルーティングルールを定義したとします.
Route::rule('blog/:id','index/blog/read');
URLアドレスを生成するには、次の方法を使用します.
Url::build('index/blog/read', 'id=5&name=thinkphp');
Url::build('index/blog/read', ['id' => 5, 'name' => 'thinkphp']);
url('index/blog/read', 'id=5&name=thinkphp');
url('index/blog/read', ['id' => 5, 'name' => 'thinkphp']);
モジュール/コントローラ/アクションを使用して生成
モジュール/コントローラ/操作にルーティングする場合は、直接書くことができます.// index blog read URL
Url::build('index/blog/read', 'id=5&name=thinkphp');
//
url('index/blog/read', 'id=5&name=thinkphp');
以上の方法では、次のURLアドレスが生成されます./index.php/blog/5/name/thinkphp.html
なお、生成方法の最初のパラメータは、ルーティング定義のルーティングアドレスと一致しなければならない.以下のように書くと、URLアドレスが正しく生成されない可能性がある.Url::build('blog/read','id=5&name=thinkphp');
環境がREWRITEをサポートしている場合、生成されたURLアドレスは次のようになります./blog/5/name/thinkphp.html
設定した場合:'url_common_param'=>true
生成されたURLアドレスは次のようになります./index.php/blog/5.html?name=thinkphp
ルーティングルールに含まれていない変数は、通常のURLパラメータを直接使用します.
なお、URLアドレス生成は、ルーティングの有効性を検出するものではなく、所定のルーティングアドレスとパラメータに従って条件を満たすルーティングルールを生成するものである.
コントローラのメソッドを使用して生成
ルーティングアドレスがコントローラの方法であり、ルーティング定義は次のとおりです.//
Route::get('blog/:id', '@index/blog/read');
では、次の方法で生成できます.// index blog read URL
Url::build('@index/blog/read', 'id=5');
//
url('@index/blog/read', 'id=5');
自動生成されたURLアドレスは次のようになります./index.php/blog/5.html
クラスメソッドを使用して生成
もしあなたのルーティングアドレスがクラスにルーティングする方法であれば、以下のルーティングルール定義を行います.//
Route::rule(['blog','blog/:id'],'\app\index\controller\blog@read');
ルーティング・アドレスがクラスへのメソッドである場合、まずルーティング定義に名前付きIDを付け、次にIDを使用してURLアドレスを迅速に生成する必要があります.
では、次の方法で生成できます.// index blog read URL
Url::build('blog?id=5');
url('blog?id=5');
自動生成されたURLアドレスは次のようになります./index.php/blog/5.html
ルーティングアドレスの直接使用
ルーティング・アドレスを直接使用してURLを生成することもできます.たとえば、次のようにします.
ルーティングルールは次のように定義されています.Route::get('blog/:id' , 'index/blog/read');
ルーティング・ルールを使用してURLアドレスを直接生成するには、次の方法を使用します.Url::build('/blog/5');
自動生成されたURLアドレスは次のようになります./index.php/blog/5.html
URL接尾辞
デフォルトでは、url_html_suffix
の構成パラメータがURL接尾辞(デフォルトhtml)として自動的に読み出されます.'url_html_suffix' => 'shtml'
自動生成されたURLアドレスは次のようになります./index.php/blog/5.shtml
複数のURL接尾辞サポートを設定した場合'url_html_suffix' => 'html|shtml'
最初の接尾辞を取ってURLアドレスを生成するので、自動的に生成されるURLアドレスは次のとおりです./index.php/blog/5.html
URL接尾辞生成を指定する場合は、次の操作を行います.Url::build('index/blog/read', 'id=5', 'shtml');
url('index/blog/read', 'id=5', 'shtml');
ドメイン名の生成
デフォルトで生成されるURLアドレスにはドメイン名は含まれていません.複数のドメイン名を使用して配置したり、ドメイン名付きURLアドレスを生成したりする場合は、4番目のパラメータを入力する必要があります.このパラメータには2つの使い方があります.
ドメイン名の自動生成
Url::build('index/blog/read', 'id=5', 'shtml', true);
url('index/blog/read', 'id=5', 'shtml', true);
4番目のパラメータがtrue
に入力されると、ドメイン名が自動的に生成されることを示し、url_domain_deploy
をオンにすると、現在のURLルールに一致するドメイン名も自動的に識別されます.
たとえば、ドメイン名ルーティング情報を登録します.Route::domain('blog','index/blog');
では、上記のURLアドレスは次のように生成されます.http://blog.thinkphp.cn/read/id/5.shtml
ドメイン名の指定
アドレスを生成するドメイン名を明示的に入力することもできます.たとえば、次のようにします.Url::build('index/blog/read','id=5','shtml','blog');
url('index/blog/read','id=5','shtml','blog');
または完全なドメイン名を入力しますUrl::build('index/blog/read','id=5','shtml','blog.thinkphp.cn');
url('index/blog/read','id=5','shtml','blog.thinkphp.cn');
生成されたURLアドレスは次のとおりです.http://blog.thinkphp.cn/read/id/5.shtml
最初のパラメータに直接ドメイン名を入力することもできます.たとえば、次のようにします.Url::build('index/blog/read@blog', 'id=5');
url('index/blog/read@blog', 'id=5');
url('index/blog/[email protected]', 'id=5');
アンカーポイントの生成
URLの生成をサポートするアンカーポイントは、URLアドレスパラメータで直接使用できます.Url::build('index/blog/read#anchor@blog','id=5');
url('index/blog/read#anchor@blog','id=5');
アンカーポイントがドメイン名と一緒に使用される場合は、アンカーポイントが前にあり、ドメイン名が後ろにあることに注意してください.
生成されたURLアドレスは次のとおりです.http://blog.thinkphp.cn/read/id/5.html#anchor
エントリファイルを非表示または追加
私たちが生成したURLアドレスにindex.php
を追加するか、index.php
を削除する必要がある場合があります.多くの場合、システムは自動的に判断します.自動生成されたアドレスに問題がある場合は、build
メソッドを呼び出す前にroot
メソッドを直接呼び出すことができます.例えば、index.php
を追加します.Url::root('/index.php');
Url::build('index/blog/read','id=5');
または非表示index.php
:Url::root('/');
Url::build('index/blog/read','id=5');
root
メソッドは、1回呼び出すだけでよい.
// index blog read URL
Url::build('index/blog/read', 'id=5&name=thinkphp');
//
url('index/blog/read', 'id=5&name=thinkphp');
/index.php/blog/5/name/thinkphp.html
Url::build('blog/read','id=5&name=thinkphp');
/blog/5/name/thinkphp.html
'url_common_param'=>true
/index.php/blog/5.html?name=thinkphp
//
Route::get('blog/:id', '@index/blog/read');
// index blog read URL
Url::build('@index/blog/read', 'id=5');
//
url('@index/blog/read', 'id=5');
/index.php/blog/5.html
//
Route::rule(['blog','blog/:id'],'\app\index\controller\blog@read');
// index blog read URL
Url::build('blog?id=5');
url('blog?id=5');
/index.php/blog/5.html
Route::get('blog/:id' , 'index/blog/read');
Url::build('/blog/5');
/index.php/blog/5.html
'url_html_suffix' => 'shtml'
/index.php/blog/5.shtml
'url_html_suffix' => 'html|shtml'
/index.php/blog/5.html
Url::build('index/blog/read', 'id=5', 'shtml');
url('index/blog/read', 'id=5', 'shtml');
Url::build('index/blog/read', 'id=5', 'shtml', true);
url('index/blog/read', 'id=5', 'shtml', true);
Route::domain('blog','index/blog');
http://blog.thinkphp.cn/read/id/5.shtml
Url::build('index/blog/read','id=5','shtml','blog');
url('index/blog/read','id=5','shtml','blog');
Url::build('index/blog/read','id=5','shtml','blog.thinkphp.cn');
url('index/blog/read','id=5','shtml','blog.thinkphp.cn');
http://blog.thinkphp.cn/read/id/5.shtml
Url::build('index/blog/read@blog', 'id=5');
url('index/blog/read@blog', 'id=5');
url('index/blog/[email protected]', 'id=5');
Url::build('index/blog/read#anchor@blog','id=5');
url('index/blog/read#anchor@blog','id=5');
http://blog.thinkphp.cn/read/id/5.html#anchor
Url::root('/index.php');
Url::build('index/blog/read','id=5');
Url::root('/');
Url::build('index/blog/read','id=5');