Download the PHP package ryunosuke/microute without Composer

On this page you can find all versions of the php package ryunosuke/microute. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package microute

Class based auto routing

Description

クラス(コントローラ)ベースでのディスパッチのみを行うマイクロルーティングフレームワークです。

MVC の MV 的な機能は一切ありません。 基本機能は下記だけです。

Install

Demo

Usage

然るべきコントローラを配置し、 Service クラスを生成して run すれば OK です。

オプション

Service のコンストラクタ引数は下記のようなものを指定します。

根本の動作に関わる重要なものや必須・準必須なものは太字にしてあります。

例えば controllerLocation は必須です。これがないとコントローラのロードができず、あらゆる処理が失敗します。 debug 等は必須ではないですが、指定しないと動作速度に影響が出たり開発が不便になったりします。

すべての要素はクロージャを渡すと初回参照時のみ実行され、以後その結果を示すようになります。 つまり callable を設定したい場合は「callable を返す Closure」を指定します(Pimple などの DI コンテナと同じ)。

Specification

コントローラの階層構造

コントローラは下記の階層を持ちます。

その名前空間内に DefaultController が存在しない場合、ひとつ上の階層の DefaultController を探しに行きます。 上の例で言えば、 /Namespace/DefaultController が存在しない場合、未キャッチ例外の捕捉は /DefaultController が担います。 トップレベルに DefaultController が存在しない場合はエラーになります。

ただし、探しに行くのは errorAction だけです。 defaultAction は探しに行きません。 その代わり、例えば /hoge/fuga アクセスは Hoge\\FugaController#defaultAction に対応します。 「Contoller へのアクションなしアクセスは defaultAction と対応する」とも言えます。

上記の

は矛盾しています。例えば「hoge/fuga/piyo」という URL は

の4つに解釈し得ます。この場合は上から順に優先されます。 「なるべく default を使わないように優先される」と言ってもいいでしょう。 さらに「Controller の default なのか Action の default なのか」は Controller が優先です。

コントローラのライフサイクル

リクエストは下記のライフサイクルを辿ります。

上記の init ~ finish の流れの過程では ThrowableResponse という例外オブジェクトを投げることもできます。 これは名前の通り「投げられるレスポンス」扱いであり、これを投げると後段の処理をすっ飛ばしてレスポンスを確定することができます。

この仕様により、init,finish の「Response 型の返却を許可します」はもはや意味のない旧仕様となります。 将来的に init,finish は廃止され、before,after だけになる可能性があります。

その他特殊なライフサイクルとして subrequest があります。 subrequest は内部リクエストが実行された時に元のコントローラインスタンスを引数に取って発火します。 その際に内部リクエスト専用の微調整を図ることができます。 もっとも、現状の実装だと内部リクエストが発生するのは forward メソッドのみです。大抵の場合は気にしなくて問題ありません。

サービスとしてのイベントハンドリング

上記のコントローラとしてのライフサイクルとは別軸でイベントハンドラが存在します。

これらは必ず1回のみ呼ばれます。複数回は呼ばれません。 また、実行コンテキストは Service となり、$this で設定情報にアクセスできます。

コントローラのライフサイクルだと複数回呼ばれてしまったり、コントローラのコンテキストではなくアプリケーションで一律に処理したい処理がある場合はこちらのほうが便利です。

配列で指定するとすべてコールされますが、 return false した場合はそこで打ち切られます。 また、どのタイミングでも Response を返した場合はそれが最終レスポンスとなり、すべてのライフサイクルはスルーされます。

コントローラ・アクションメソッドの属性

属性は下記の順序に従って読み込まれます

つまり「親 < 自身」「クラス < メソッド」という優先順位となり、より定義に近いものが優先されるということです。 究極的には大本の抽象コントローラに属性を記述すると下位コントローラの全メソッドでそれが適用されることになります。

これを止めるには NoInheritance 属性を使用します。 上記の継承ツリーの経路に NoInheritance 属性があるとそこで読み取りが打ち切られるようになります。 つまりメソッドに NoInheritance を付与すればクラスも親も見ない完全に固有の属性として扱われます。 NoInheritance 属性は読み取りを止めたい属性名を指定できます。省略時は全属性です。

属性の種類は下記です。

下記はルーティング用属性です。

大抵の属性は複数記述できます。

上記は /url1 /url2 の両方が有効です。

Alias は「URL → Controller」のルーティングなのでメソッドではなくクラス属性として記述します。

このようなクラス定義をすると /fuga/foo という URL はこのコントローラの fooAction へ行き着きます。 つまり php レイヤでクラス名を変更するのと同じ効果があります。

同様に Scope は「URL → Controller」のルーティングなのでメソッドではなくクラス属性として記述します。

このようなクラス定義をすると /hoge/13/foo という URL はこのコントローラの fooAction へ行き着きます。 pref_id がキャプチャされる点と相対パスが使える点が alias と異なります。

foo だけではなく、他にアクションが生えていれば到達します。 つまり、「全アクションで #[Regex] して共通パラメータを定義」したと同様の振る舞いをしますし、そのような使い方を想定しています。

アクションメソッドに渡ってくるパラメータ

特殊なことをしなければ ?id=123 というクエリストリングでアクションメソッドの引数 $id が設定されます。 データソースは #[Argument] #[Method] などの属性に応じて変わります。 その際、下記の特殊な処理が走ります。

アクションメソッドの戻り値による挙動

#[Event('hoge')] によるイベントディスパッチ

#[Event('hoge', 1, 2, 3)] という属性を記述するとアクションメソッドの前後で hogeEvent がコールされるようになります。 具体的には下記のコードで

「アクション前アクション本体アクション後」と出力されます。

イベントの仕様は下記です。

その他

ルーティング

あらゆるルーティングは、基本である「Controller の名前空間をそのまま URL へマッピング(Hoge\Fuga\PiyoController::actionActionhoge/fuga/piyo/action)」という前提を崩しません。 リダイレクトを設定しようと正規表現ルーティングを設定しようと上記の URL も生きていてアクセス可能です。 これを無効にするには #[DefaultRoute] 属性を使用する必要があります。

デフォルトルート名

すべてのアクションメソッドはデフォルトで ControllerName::ActionName という(仮想的な)ルート名を持ちます。 resolver で URL を生成する際に、$resolver->action($controller, $action) で生成するのではなく、$resolver->route("$controller::$action") で生成しておけば、そのアクションを変更したくなった時、ルート名の変更をせずに済みます(ルート名は明示的に登録されたルート名が優先されるため)。

とは言え存在しない "$controller::$action" を指定するのは気持ち悪いのであらかじめ #[Route] で指定しておくのがベストです。

urls メソッド

router に urls というメソッドが生えています。これは現存するすべての URL とそのメタ情報を返します。 ルーティングの確認や sitemap・URL リストなどを作るときに便利です。

License

MIT


All versions of microute with dependencies

PHP Build Version
Package Version
Requires php Version >=8.0
symfony/http-kernel Version 5.*|6.*
symfony/mime Version 5.*|6.*
psr/simple-cache Version *
psr/log Version *
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package ryunosuke/microute contains the following files

Loading the files please wait ....