ThinkPHPルーティング
作成者:MirrorWang Yuyang
Thinkphpルーティングの主な機能は、URLアドレスをより美しく、簡潔でエレガントにすることです...;ルートを設定すると、URLの検出、検証、その他の操作に非常に便利です;ルーティング機能はデフォルトの開いているconfig/app.php
ファイルで設定されます:
'with_route' => true;
-
ルーティング構成ファイル:
config/route.php
-
ルート定義ファイル:
route/app.php
ルートディレクトリ内の定義ファイルのファイル名はランダムで有効です。
ルート定義
ルーティングテストファイルを定義します。Address.php
class Address
{
public function index()
{
return 'index';
}
public function details($id)
{
return 'details目前调用的ID'.$id;
}
}
-
ルーティングルールが定義されていない場合、デフォルトのURLアクセス方法
http://xxx.com/Index.php/address/id/5
-
URLルーティングルールを
route/app.php
定義し、定義ファイルで構成するRoute::rule('details/:id','Address/details')
http://xxx.com/Index.php/details/5
ルーティングルールを構成したら、ルーティングルールを使用してそれらにアクセスする必要があります。それ以外の場合は、不正なリクエストと見なされます。
ルート定義の登録
Route::rule('路由表达式','路由地址','请求类型')
ルーティング式:ルーティングアクセスルールを参照します
ルーティングアドレス:アクセスターゲットのアドレスを参照します(コントローラー/メソッド/パラメーター)
要求タイプ:デフォルト->任意
タイプ 説明文 ショートカット方法 取得する GETリクエスト 取得する 役職 POSTリクエスト 役職 プット PUTリクエスト プット 削除 DELETEリクエスト 削除する パッチ PATCHリクエスト パッチ * 任意のリクエストタイプ どれか ショートカット登録ルートの定義:
Route::[快捷方法名]('路由表达式','路由地址')
例:
Route::rule('details/:id','Address/details')
URL:http://xxx.com/Index.php/details/5
rule
ルートをAddress
コントローラーに登録details
必須ルーティング:必須ルーティングが有効になっています。すべてのアクセスはルーティングアクセスルールに従う必要があります。それ以外の場合はエラーが報告されます。
// 是否强制使用路由
'url_route_must' => true,
ホームページのルーティング設定:(バックスラッシュはホームページのアドレスです)
Route::rule('/','Index/index');
閉鎖サポート
クロージャーにより、コントローラーメソッドを必要とせずに、URLを介して直接実行できます。
Route::get('think', function () {
return 'hello,ThinkPHP6!';
});
Route::get('think', function ($id) {
return 'hello!'.$id;
});
ルーティングルール式
ルール式には通常、静的ルールと動的ルール、および2つのルールの組み合わせが含まれます。たとえば、以下はすべて有効なルール式です。
// 静态路由
Route::rule('ads','Address/index');
[URL]=> tp/Index.php/ads
// 静态+动态路由
Route::rule('datails/:id','Address/details');
[URL]=> tp/Index.php/details
// (多参数)静态+动态路由
Route::rule('search/:id/:uid','Address/search');
[URL]=> tp/Index.php/search/1/1
// 全动态地址 不会限制search参数固定
Route::rule(':search/:id/:uid','Address/search');
[URL]=> tp/Index.php/search/1/1
[URL]=> tp/Index.php/s/1/1
// 可选参数地址
Route::rule('blog/:year/[:month]','Address/blog');
// 完全匹配地址
Route::rule('search/:id/:uid$','Address/search');
[URL]=> tp/Index.php/search/1/1
//在路由配置文件中可以开启全局路由完全匹配
//开启完全匹配后,使用`completeMatch(false)`关闭
// 额外参数 (隐式传值)
// 路由跳转支持传入不显示在URL中参数
Route::rule('blog/:id','blog/read')
->append(['status'=>1,'app_id'=>5]);
ルート識別
ルートに基づいてURLアドレスを生成し、ルートを定義するときに一意の識別子を指定します
// 定义标识
Route::rule('blog/:year/:month','Adderss/blog')
->name('route_blog');
return url('route_blog',
['year'=>$year,'month'=>$month]
);
可変ルール
システムのデフォルトのルーティング変数ルールは\w+
です。変数ルールはルーティング構成ファイルで変更できます
pattern()
メソッドを使用して、パラメーター変数のルールを設定できます。
Route::rule('details/:id','Address/details')
->pattern(['id'=>'\d+']);
pattern()
配列転送の受信、複数のパラメーター変数を設定するためのルールのサポート
Route::pattern([
'id' => '\d+',
'uid' => '\d+'
]);
上記の方法を使用して、ルーティング定義ファイルでグローバルルールを定義できます。
ルーティング計画を達成するための結合された変数ルールの使用をサポートします。
Route::rule('details-<id>','Address/details')
->pattern('id','\d+');
動的組み合わせアセンブリ:
Route::rule('details-:name-:id','Hello:name/index')
->pattern('id','\d+')
ルーティングアドレス
ルーティングアドレスは通常、次のとおりです。控制器/操作方法
Route::rule('/','Index/index.php');
マルチレベルコントローラ、ルーティングアドレス
Route::rule('details/:id','group.Blog/details');
フルパスの操作方法:
完整类名@操作方法
静的メソッドのアドレス操作:
完整类名::静态方法
ルーティングを::readirect()
使用してリダイレクトを行う方法
ルーティングパラメータ
ルートを設定するときに、関連するメソッドを設定して、一致の検出と動作の実行を実装できます
パラメータ | 解説 | メソッド名 |
---|---|---|
ext | URLサフィックスの検出、複数のサフィックスのマッチングのサポート | ext |
deny_ext | URLはサフィックスの検出を禁止し、複数のサフィックスのマッチングをサポートします | denyExt |
https | httpsリクエストかどうかを確認する | https |
ドメイン | ドメイン名の検出 | ドメイン |
complete_match | ルートを完全に一致させるかどうか | completeMatch |
モデル | バインディングモデル | モデル |
キャッシュ | リクエストキャッシュ | キャッシュ |
ajax | Ajax検出 | ajax |
pjax | Pjax検出 | pjax |
json | JSON検出 | json |
検証 | データ検証のためにバリデータークラスをバインドします | 検証 |
追加する | 追加のパラメーターを追加する | 追加する |
ミドルウェア | ルーティングミドルウェアの登録 | ミドルウェア |
フィルタ | 変数フィルタリングのリクエスト | フィルタ |
ext
このメソッドは、URLサフィックスを検出することです
Route::rule('details/:id','Address/details')->ext('html');
https
httpsリクエストかどうかを検出するメソッド
Route::rule('details/:id','Address/details')
->https()
->ext('html');
ルーティングパラメータを一括で設定する必要がある場合は、このoption
方法も使用できます。
Route::get('new/:id', 'News/read')
->option([
'ext' => 'html',
'https' => true
]);
ドメイン名ルーティング
ルーティングを特定のドメイン名に制限する
Route::domain('baidu.com',function(){
Route::rule('blog/:id','Address/blog')
})
ドメイン名ルーティングはルーティングパラメータ操作をサポートします
クロスドメインリクエスト
ブラウザーのセキュリティメカニズムは、非相同(クロスドメイン)リクエストをインターセプトします; Thinkphpルーティングでは、それはallowCrossDomain()
クロスドメインリクエストを実装するために使用されます。設定後、ルートは非相同リクエストを許可します:
Route::rule('details/:id'.'Address/details')
->allowCrossDomain();
同時に、セキュリティ上の理由から(誰もが私のところに来ることができるわけではありません)、指定されたクロスサイトリクエストの制限をサポートしています。
Route::rule('details/:id'.'Address/details')
->allowCrossDomain([
'Access-Control-Allow-Origin' => "http://baidu.com"
]);
ルーティングパケット
ルートのグループ化、同じプレフィックスを持つルートをグループに結合し、ルートの定義を簡略化すると、照合とメンテナンスが容易になります。
group()
パケットルーティング登録に使用:
Route::group('address',function(){
Route::rule(':id','Address/details'),
Route::rule(':name','Address/search');
})->pattern(['id'=>'\d+','name'=>'\w+']);
group()
の最初のパラメータは省略できます。最初のパラメータは、ルートに共通のルート設定パラメータを設定するだけです。最初のパラメータを追加すると、ルーティングルールの内容を省略できます。上記と次の2つのプログラムは効果がありますが、省略した場合ルール名、アクセス違反が発生します。これはpattern()
、各パラメーターの受信範囲を制限するために必要なため、推奨される省略形ではありません。個人的にグループ化するには、次の方法をお勧めします。
Route::group('add',function(){
Route::rule('de/:id','Address/details'),
Route::rule('se/:name','Address/search');
});
[URL] => tp/Index.php/add/de/1
prefix()
グループアドレスを省略できるコントローラーを使用する
Route::group('add',function(){
Route::rule('de/:id','details'),
Route::rule('se/:name','search');
})->prefix('Address/');
ルーティングルールは、特にルーティングルールが特に大きい場合、解析中により多くのメモリリソースを消費します。
ここで遅延解決をオンにして、メモリスペースを節約できます(ルーティングは、一致する場合にのみ実行されます)
MISSルーティング
グローバルMISS:必須のルーティング機能を有効にするのと同様に、対応するルールが一致しない場合、自動的にMISSにジャンプします。
Route::miss('public/miss');
// 闭包
Route::miss(function(){
return '404 Not Found!';
});
部分的/グループミス:グループ化で使用され、一致ルールを満たさない場合はグループ化に調整されます
Route::group('add',function(){
Route::rule('de/:id','details'),
Route::rule('se/:name','search'),
Route::miss('miss')
})->prefix('Address/');
ドメイン名MISSルーティング:このルートをサポートして、個別のMISSルーティングをセットアップします
Route::domain('blog', function () {
// 动态注册域名的路由规则
Route::rule('new/:id', 'news/read');
Route::rule(':user', 'user/info');
Route::miss('blog/miss');
});
リソースのルーティング
リソースルーティング:固定された共通メソッドを採用して、URLを簡略化する機能を実現します。
リソースルートを作成する
Route::resource('[资源规则名]','[访问路径]');
class Address
{
public function index()
{
return 'index';
}
public function details($id)
{
return 'details目前调用的ID=>'.$id;
}
public function search($name)
{
return "Name => ".$name;
}
public function blog($year,$month)
{
return url('route_blog',['year'=>$year,'month'=>$month]);
}
}
Address
リソースコントローラーを作成したら、ルート定義ファイルにリソースルートを登録します
Route::resource('add','Address');
リソースルートが正常に登録されると、メソッドのマッチングが自動的に完了します。
index
==>Address/index
->インデックス
details
==>Address/details
->詳細/:id
search
==>Address/search
-> search /:name
blog
==>Address/blog
-> blog /:年/:月
vars()
デフォルトのパラメータ名を変更し、使用して、デフォルトのパラメータ$id
名を
Route::resource('add','Address')
->vars(['add'=>'add_id']);
コントローラーで適宜変更する必要があります
only()
システムが提供するリソースを制限する
Route::resource('add','Address')
->only(['index','search','blog']);
except()
システムが提供するリソースを排除する方法
Route::resource('add','Address')
->except(['index']);
rest()
システムのデフォルトのメソッドを変更する(要求メソッド、アドレス、操作)
Route::rest('create',['GET','/:id/add','add'])
ネストされたリソースルーティング
……
注釈ルーティング
ルーティングアノテーションメソッドは、デフォルトではシステムでサポートされていません。拡張機能をインストールする必要があります。
composer require tohthink/think-annotation
関連するライブラリを紹介します。use think\annotation\Route
簡単な紹介の後、コントロール側でコメントコードを設定し、PHPDOCを使用して段落を生成し、ルーティングルールを追加できます。
/**
* @parom $id
* @return string
* @route("details/:id");
*/
注釈モードは、リソースルーティングをサポートします。
use think\annontation\Route\Resource;
/**
* @Resource("blog")
*/
注釈モードはグループ化をサポートします:
use think\annontation\route\Group;
/**
* @Group('ads')
*/
URL生成
Route::buildUrl()
URLを使用してルートを取得する
Route::buildUrl('地址',[参数]……)
public function details($id)
{
return Route::buildUrl('Url/details',['id'=>$id]);
}
ルートにエイリアスが定義されている場合は、そのエイリアスをbuildUrl()
使用できます。
同時に、
url()
代わりにヘルパー関数を使用できます。