マイナー [PHP フレームワーク] 1. はじめに
1.1 マイナーとは
Minor はシンプルですが優れた PHP フレームワークです。フレームワークが行うべきことを実行します。シンプルですが強力です。
フレームワーク Github アドレス: github.com/Orlion/Minor
(良いと思ったら星を付けてください(^-^)V)
作者: オーライオン
志胡: https://www.zhihu.com/people/orlion
Github: https://github.com/Orlion
1.2 マイナーの内容
1.2.1 マイナーは主に以下を提供します:
- MVC 階層構造 (実際にはモデル層はなく、ユーザーが自分で作成できます)
- Ioc (マイナーで具体化されているのは、symfony/laravel に似たサービスコンテナです)
- イベント (symfony/laravel のイベントメカニズムと同様、オブザーバーパターンの特定の実装)
- Proxy はプロキシ モードの具体的な実装です。Minor を作成したとき、Spring ライクな AOP 機能を実装したいと考えていました。しかし、書いているときに、AOP を実装したい場合は設定ファイルが必要になることがわかりました。開発が複雑になるため、AOP を諦めて Proxy クラスを提供しました)
1.2.2 マイナーが提供するものはなぜ非常に少ないのですか?
現在の PHP フレームワークのほとんどは非常に肥大化しており、さまざまな機能を提供しています。私の考えでは、これは単に車輪の再発明にすぎません (ただし、フレームワークを作成することも車輪の再発明です...)。ユーザーに多くのことを与えるべきではありません (何度も繰り返し再発明されます)。これにより、ユーザーは簡単に始めることができます。個人的には、Java の Spring フレームワークは非常に優れたフレームワークだと思います。十分にシンプルで、十分に強力で、小さいことは美しいです。マイナーはこの考えのもとに生まれたフレームワークです。あらゆる種類の厄介なページング、ORM、テンプレート エンジン、ログ、キュー、その他の機能がなければ、それは単なる「シェルフ」です。
1.2.3 利点
急いでください! 高性能! 単純! 簡単に始められます! すっきりとした構造!
小さいことは美しい!
1.3 インストール
github (github.com/Orlion/Minor) から git clone するか、zip パッケージを直接コピーしてプロジェクトに解凍するだけです。
マイナー フレームワークは、<span class="token keyword">public<span class="token演算子">/<span class="token punctuation">.htaccess<code class=" php"><span class="token keyword">public<span class="token operator">/<span class="token punctuation">.htaccess</span></span></span>
index<span class="token punctuation">.php</span>
ファイルは、リンクから index<span class="token punctuation">.php<code class=" php">mod_rewrite
を削除します。 サーバーが Apache を使用している場合は、
Nginx サーバーの場合は、URL の設定ファイルに次の指示を追加します:
location /<span style="color: #000000;"> { try_files $uri $uri</span>/ /index.php?<span style="color: #000000;">$query_string; }</span>
このようにして、http://localhost/public/ にアクセスすると、インストールが成功した画面が表示されます。 (もちろん、パブリックを削除するように設定することもできます)
1.4 マイナーの仕組み
1.4.1 全体プロセス
URL http://www.servername.com/demo/test を例に挙げます:
- すべてのリクエストは public/index.php ファイルにリダイレクトされます
-
グローバル変数を定義する
<span style="color: #008080;">define</span>('APP_DIR', <span style="color: #008080;">realpath</span>(__DIR__.'/../app/') .<span style="color: #000000;">DIRECTORY_SEPARATOR); </span><span style="color: #008080;">define</span>('PUBLIC_DIR', <span style="color: #008080;">realpath</span>(__DIR__) .<span style="color: #000000;">DIRECTORY_SEPARATOR); </span><span style="color: #008080;">define</span>('VENDOR_DIR', <span style="color: #008080;">realpath</span>(__DIR__.'/../vendor/') .<span style="color: #000000;">DIRECTORY_SEPARATOR); </span><span style="color: #008080;">define</span>('ROOT_DIR', <span style="color: #008080;">realpath</span>(__DIR__.'/../') .DIRECTORY_SEPARATOR);
ログイン後にコピー -
設定ファイル $app に基づいて App オブジェクトを作成します。
<span style="color: #800080;">$app</span> = \Minor\Framework\App::<span style="color: #000000;">getInstance( </span><span style="color: #800080;">$config</span> = ['app' => <span style="color: #0000ff;">require</span> APP_DIR . 'Config/app.php', 'test' => <span style="color: #0000ff;">require</span> APP_DIR . 'Config/test.php'], <span style="color: #800080;">$providers</span> = <span style="color: #0000ff;">require</span> APP_DIR . 'Config/providers.php', <span style="color: #800080;">$routes</span> = <span style="color: #0000ff;">require</span> APP_DIR . 'Config/routes.php', <span style="color: #800080;">$events</span> = <span style="color: #0000ff;">require</span> APP_DIR . 'Config/events.php'<span style="color: #000000;"> );</span>
ログイン後にコピー -
アプリはリクエストを処理してMinorResponseオブジェクトを生成します
<span style="color: #800080;">$response</span> = <span style="color: #800080;">$app</span>-><span style="color: #000000;">handle( </span><span style="color: #800080;">$request</span> = \Minor\HttpKernel\MinorRequestBuilder::<span style="color: #000000;">buildMinorRequest() );</span>
ログイン後にコピー -
ユーザーに応答を返す
<span style="color: #800080;">$response</span>->send();
ログイン後にコピー
1.4.2 アプリがリクエストを処理する方法
<span style="color: #0000ff;"> public</span> <span style="color: #0000ff;">function</span> handle(MinorRequest <span style="color: #800080;">$minorRequest</span><span style="color: #000000;">) { </span><span style="color: #800080;">$minorResponse</span> = MinorResponse::<span style="color: #000000;">getInstance(); </span><span style="color: #800080;">$this</span>->minorRequest = <span style="color: #800080;">$minorRequest</span><span style="color: #000000;">; </span><span style="color: #0000ff;">list</span>(<span style="color: #800080;">$controllerName</span>, <span style="color: #800080;">$actionName</span>, <span style="color: #800080;">$params</span>) = <span style="color: #800080;">$this</span>->router->dispatcher(<span style="color: #800080;">$minorRequest</span>-><span style="color: #000000;">getUrl()); </span><span style="color: #0000ff;">if</span> (!(<span style="color: #800080;">$controllerName</span> && <span style="color: #800080;">$actionName</span> && <span style="color: #008080;">is_array</span>(<span style="color: #800080;">$params</span><span style="color: #000000;">))) { </span><span style="color: #0000ff;">if</span> (!Config::get(['app' => 'DEBUG']) && (<span style="color: #800080;">$handler</span> = Config::get(['app' => '404_HANDLER'])) && (<span style="color: #800080;">$handler</span><span style="color: #000000;"> instanceof \Closure)) { </span><span style="color: #800080;">$handler</span>(<span style="color: #800080;">$minorRequest</span>-><span style="color: #000000;">getRequestUrl()); } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> { </span><span style="color: #0000ff;">throw</span> <span style="color: #0000ff;">new</span> RouteException('404 Not Found'<span style="color: #000000;">); } } </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> { </span><span style="color: #800080;">$minorResponse</span> = <span style="color: #800080;">$this</span>->invoke(<span style="color: #800080;">$controllerName</span>, <span style="color: #800080;">$actionName</span>, <span style="color: #800080;">$params</span><span style="color: #000000;">); } </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$minorResponse</span><span style="color: #000000;">; }</span>
-
最初にデフォルトの応答オブジェクトを初期化します
<span style="color: #800080;">$minorResponse = MinorResponse::getInstance();</span>
ログイン後にコピー -
Router のdispatcher($url) メソッドを呼び出して、ルーティング設定に従って URL に対応するコントローラー、メソッド、パラメーターを取得します。
<span style="color: #0000ff;">list(<span style="color: #800080;">$controllerName, <span style="color: #800080;">$actionName, <span style="color: #800080;">$params) = <span style="color: #800080;">$this->router->dispatcher(<span style="color: #800080;">$minorRequest->getUrl());</span></span></span></span></span></span>
ログイン後にコピー -
コントローラーの定式化メソッドを実行し、応答オブジェクトを返します
<span style="color: #800080;">$minorResponse = <span style="color: #800080;">$this->invoke(<span style="color: #800080;">$controllerName, <span style="color: #800080;">$actionName, <span style="color: #800080;">$params<span style="color: #000000;">); <span style="color: #0000ff;">return <span style="color: #800080;">$minorResponse;</span></span></span></span></span></span></span></span>
ログイン後にコピー
1.5 上記の自慢フィールドは無視してください
そうだね!ただ無視してください。思い出さなかったからといって私を責めないでください

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック







