tp5.1-ルーティング-URL生成

6541 ワード

ThinkPHPは、ルーティングURLアドレスの統合生成をサポートし、すべてのルーティング方式をサポートし、ルーティング定義や変更のために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回呼び出すだけでよい.