類似の役割の枠組みの中でルーティング、それがWebアプリケーションにアクセスするためのURLアドレスをルーティング全体制御室のようなものである、ルーティングはURL要求、スケジューリングおよび配信を拒否するか、受け入れることができるだけでなく、副作用ルーティングのであなたのURLアドレス要求は、よりエレガントにすることができますので、ルールは任意に、コントローラの操作方法、さらにはルーティングだけでなく、をサポートするために、5.0のルーティングをルーティング、ため、より多くのセキュリティを意味し、実際のURLを公開することなく、定義することができます任意のクラスまたは閉鎖します。
1、ルーティングモード
ルーティングは、このような、それを省略することができる方法をモジュール内のインデックスのURLアドレスとしてルーティング機能モジュールとして理解することができ、デフォルトのURLアドレスは、URLルーティングによるアクセスを簡素化するためにどのように言われた後、ビット長に見えました。ThinkPHP5.0柔軟なルーティング、および強制定義を必要としないが、以下の三つの方法に要約することができます。
1.1、ノーマルモード
完全にデフォルトモードのPATH_INFOのURLを使用してルートを休館:
'url_route_on' => falseを、
ルートが閉鎖された後、それがデフォルトモードアクセスPATH_INFOのURLを使用し、任意のルーティングルールを解決しません。
http:// serverNameの/ index.phpを/モジュール/コントローラ/アクション/ PARAM /値/ ...
しかし、まだ動作パラメータ方法を結合することができ、空気コントローラおよび空気操作の特性は、URLアドレスを簡略化されます。
あなたが設定できるurl_param_type
設定パラメータは、パラメータ取得モード以下のモードパス情報に変更し、デフォルトの名前でペアで解決され、分析変数をサポートするために、のみに変更する必要があります。
// オーダー解析変数 'url_param_type' => 1、
1.2、混合モード
オープンルート、およびデフォルトルーティングを使用PATH_INFO +混合モードを定義します。
'url_route_on' => 真、 'url_route_must' => falseを、
以下の方法は、アドレスのみにアクセスする必要があるルーティングルールは、他の人はまだPATH_INFOモデルの最初の通常モードに応じたURLへのアクセスを持って、ルーティングルールを定義する必要が定義されています。
1.3、強制モード
オープンルートおよびルートを設定し、アクセスするために定義する必要があります。
'url_route_on' => 真、 'url_route_must' => 真、
このように、以下はそれ以外の場合は、例外がスローされます、(自宅を含む)厳密に各アドレスへのアクセスが定義されているルーティングルールでなければなりません。
用いたホームルーティングルール/
の定義は、例えば、次の出力は、ホームルーティングすることができますHello,world!
ルート::( '/'、取得機能(){ リターン 'こんにちは、世界を!' 。 });
2、ルーティング構成
2.1 、
要求された実行プロセスのURLは:用户请求 -> 路由解析 -> 调度请求 -> 执行操作 -> 响应输出
2.2、路由规则写在哪里:
* 路由规则写在与应用配置统计的route.php文件中
* 路由规则主要使用路由类Route::rule()方法注册
2.3、
设置路由配置文件列表:
'route_config_file' => [ '家'、 '管理者']、
application/home.php
コンフィギュレーションhome
モジュールのルーティングルール、application/admin.php
設定admin
ルールをルーティングモジュール。
が実行されている時間はまだロードされ、登録され、同時に、しかし時間は明らかに容易にコラボレーションのために分離定義されます。
3、ルーティングレジストリ
動的ルーティングは単一のレジスタと一括登録だけでなく、ルート定義ファイルを直接登録し一元的に定義することができる方法を使用することができます。
3.1、スタティックルーティングおよび動的登録
さて、次のURLに新しいルーティングルールを定義します。
ルート::ルール( 'こんにちは/:名'、 'インデックス/インデックス/こんにちは');
今、我々は、分析しなければならないrule
パラメトリック法、最初のパラメータと呼ばれるルーティングルール(ルーティングによってアクセスされたアドレス)、対応するこのルールの第二パラメータルーティングアドレス(ルートの元の定義の前にアクセスされたURLアドレス)。
ルーティングルールは通常(これは、例えば変数を含めることができ:name
、ルーティングルールがために支配するルート上に呼び出される(オプションの変数を含む)変数が含まルート変数である)、ダイナミックルーティングを、それは我々がルーティングを呼び出す任意の変数が含まれていない、スタティックルーティングを例えば:
// スタティックルーティングは、ルール ルートを::ルール(「こんにちは」、「インデックス/インデックス/こんにちは」); // 動的ルーティングルール のルート::ルールを(「こんにちは/:名」、「インデックス/インデックス/こんにちは」);
注意:ルーティングルール定義されThinkPHP5.0は、ルートディレクトリからではなく、モジュール名に開始することです。そして、元のアクセスアドレスは自動的に期限切れになります。
3.2、URL要求タイプ
私たちは多くの種類が共通含むURLリクエストがある知っているGET
/ POST
/ PUT
/ DELETE
などは、我々は、使用rule
登録のルーティング方法を、デフォルトでは、アクセス要求のいずれかのタイプをサポートすることですが、あなたは三番目のパラメータにより、要求のタイプを定義することができます。
ルート::ルール( 'こんにちは/:名'、 'インデックス/インデックス/こんにちは'、 'GET');
注意:のみを通じてGET
アクセス要求、ルートを有効にします。指定されていない場合、デフォルトでは、要求のいずれかのタイプであります
あなたはルートがサポートすることができますしたい場合は要求のすべての種類を、あなたが使用することができます。
ルート::任意の( 'こんにちは/:名'、 'インデックス/インデックス/こんにちは');
注:any
実際には、方法及びrule
方法は第三引数を記述する必要があることを除いて、同じです。
システムは、例えば、ルーティングルールを定義された異なる要求タイプの簡略化された方法を提供します。
Route::get('new/:id','News/read'); // 定义GET请求路由规则 Route::post('new/:id','News/update'); // 定义POST请求路由规则 Route::put('new/:id','News/update'); // 定义PUT请求路由规则 Route::delete('new/:id','News/delete'); // 定义DELETE请求路由规则 Route::any('new/:id','News/read'); // 所有请求都支持的路由规则
我们也可以批量注册路由规则,例如:
Route::rule(['new/:id'=>'News/read','blog/:name'=>'Blog/detail']); Route::get(['new/:id'=>'News/read','blog/:name'=>'Blog/detail']); Route::post(['new/:id'=>'News/update','blog/:name'=>'Blog/detail']);
4、路由表达式
路由表达式统一使字符串定义,采用规则定义的方式。
4.1、规则表达式
规则表达式通常包含静态地址和动态地址,或者两种地址的结合,例如下面都属于有效的规则表达式:
'/' => 'index', // 首页访问路由 'my' => 'Member/myinfo', // 静态地址路由 'blog/:id' => 'Blog/read', // 静态地址和动态地址结合 'new/:year/:month/:day'=>'News/read', // 静态地址和动态地址结合 ':user/:blog_id'=>'Blog/read',// 全动态地址
每个参数中以“:”开头的参数都表示动态变量,并且会自动绑定到操作方法的对应参数。
4.2、路由变量
支持对路由参数的可选定义,例如:
'blog/:year/[:month]'=>'Blog/archive',
[:month]
变量用[ ]
包含起来后就表示该变量是路由匹配的可选变量。
4.3、变量解析方式
路由规则之外的变量解析方式一般是key1/value1/key2/value2
解析为key1=value1
,key2=value2
,也就是说
http://tp5.com/hello/thinkphp/city/shanghai
除了会解析路由变量name
之外,还会解析另外一个city
变量,分别是:
'name' => 'thinkphp', 'city' => 'shanghai'
当然我们可以设置按顺序解析:
'url_param_type' => 1
这个时候如果访问http://tp5.com/hello/thinkphp/city/shanghai,得到的变量结果就完全不同了:
'name' => 'thinkphp', 0 => 'city', 1 => 'shanghai',
4.4、定制分隔符
我们在定义路由规则的时候,都是统一使用/
作为URL分隔符,但并不是表示URL访问的时候只能使用/
作为分隔符,例如我们可以设置参数:
'pathinfo_depr' => '-',
那么URL访问地址就会变成
http://tp5.com/hello-thinkphp http://tp5.com/hello-thinkphp-beijing
方法一:param_depr
如果你希望某个路由地址使用不同的URL分隔符,有两种方法,先介绍第一种比较简单的,定义路由规则的时候,添加param_depr
参数(要求V5.0.2+
),例如:
Route::get('hello/:name/[:city]','index/index/hello',['param_depr' => '-'],[ 'name' => '\w+' , 'city' => '[A-Za-z]+' ]);
表示只有在该路由规则访问的时候,才使用-
作为url分隔符。
方法二:组合变量
在一些复杂的路由规则定义中,我们可以使用组合变量定义方式,组合变量的优势是变量分隔符可以随意定义,例如:
//正确路径:http://www.mtp5.com/test/1;注:‘?<name?>’表示可选的,['index/index2/test', []]里面的‘[]’是必须的 'test/<id>-?<name?>' =>['index/index2/test', []], //正确路径:http://www.mtp5.com/test-1 'test-<id>-?<name?>' =>['index/index2/test', []], //正确路径:http://www.mtp5.com/test-1- 'test-<id>-<name?>' =>['index/index2/test', []], //正确路径:http://www.mtp5.com/test/1- 'test/<id>-<name?>' =>['index/index2/test', []]
通过本篇内容的学习,你已经掌握了路由变量的使用,下面是路由变量的对比
变量定义 | 必须变量 | 可选变量 | 变量分隔符 |
---|---|---|---|
普通变量 | :name |
[:name] |
/ |
组合变量 | <name> |
<name?> |
实际URL分隔符 |
4.5、完整匹配
规则匹配检测的时候只是对URL从头开始匹配,只要URL地址包含了定义的路由规则就会匹配成功,如果希望完全匹配,可以在路由表达式最后使用$
符号,例如:
'new/:cate$'=> 'News/category',
正确的路径:http://serverName/index.php/new/info
错误的路径:http://serverName/index.php/new/info/1