Aleph PHPフレームワーク

アレフに会おう!


サイズと機能の面でPHPの新しいマイクロフレームワークは、医療用メスとのみ比較するのに適しています。

デフォルトでは、アプリケーションの迅速な起動と作成に必要なすべてが含まれています。

あなたがそれに注意を払うべき理由:

さらに、Alephはこれまでのところ、すでに準備が整っており、実際のWebアプリケーションで長い間使用されてきた本格的なフレームワークのコアにすぎません。 システムの残りの部分の公開はもうすぐです-デスクトッププログラミングで行っているかのようにアプリケーションを設計および実装する機能に簡単に恋をします(今すぐ想像してすぐに批判しようとせず、自分の目で見るまで待ってください。私が念頭に置いていたものを理解してください)。 ORM、および制御システム(ASP.Netの制御など)、バリデーター、キャッシュ、テンプレート、および補助ライブラリのセットをフレームワークにするすべてがあります。

カーネルはphp 5.3.0で記述され、コードはこのバージョンで導入された言語機能を使用します。 コードはMITライセンスの下で配布され、ドキュメントとフォーラムのあるgithubとサイトへのリンクがあります。記事の最後に、コードはあまりなく、すべてがコメントされ、構造がサイトで説明されています。

フレームワークを使用してアプリケーションを作成し、動作を確認してみましょう。

既成のソースコードでアーカイブをダウンロードし、オプションで-思考の流れに従うか、そのようなコードがパブリックドメインになったことをすべて完全に理解して喜ぶことで、実用的な部分から知り合いを始めることをお勧めします。つまり、現在および将来使用できることを意味しますプロジェクト。



プロジェクトのルートには、アプリケーションへの単一のエントリポイントであるindex.phpファイル(近くにある.htaccessのコンテンツについて説明するのは間違いないでしょう)、カーネル自体が存在するlibフォルダー( aleph.phpファイル)、および特別なrequirements.phpスクリプト。起動結果により、システムでAlephベースのアプリケーションを実行する準備ができているかどうかがわかります。 ルートには、エラーページテンプレートの例として404.htmlファイルも含まれてます。



しかし、私たちにとって最も興味深いのは、もちろん、 アプリフォルダーの内容です 。 不要な詳細なし: キャッシュフォルダー-構成でファイルのキャッシュを選択したときに特別なキャッシュファイルを保存するため(カーネルに適用)、システムログサービスファイルのログフォルダー。 これらのフォルダーの場所と名前には厳密な制限はありません(フレームワークの一般的な制限もありません)(これらはすべて簡単に構成できます)。

エンジンフォルダーには、アプリケーションのファイルが既に含まれています。

店舗でも、ブログでも、トドリストでさえも、デモンストレーションとして選ばれたわけではありません。 というのは、%framework_name%のブログの実装または%another_framework_name%のストアの実装を見ると、思わず「いいね、フレームワークはタスクのフレームワークで正常に動作しますが、どうすれば必要なことを実行できますか?」 Alephはこれらの質問には答えません。必要なものに適応するための優れたツールを提供します。 ハンマーが必要な男を覚えていますか? (記事http://habrahabr.ru/post/141477/から)。 ですから、phpではまだハンマーを使用します。これは、私が意味することを理解していれば実用的です。

まず、カーネルでのルーティングの機能を示します。 私たちは皆、熟練した手の正規表現がクールなものであることをよく知っています。このルーティングもそれを使用します。 index.phpファイルの内容を見てください。

<?php //       $_SERVER['DOCUMENT_ROOT'] = __DIR__; //      require_once('lib/aleph.php'); //     $a = Aleph\Core\Aleph::init()->config('app/engine/config.ini'); //     ""  if (method_exists($a->cache(), 'gc') && isset($a['cache']['gcProbability'])) { if ((int)$a['cache']['gcProbability'] > rand(0, 99)) $a->cache()->gc(); } //   $map = array('/#method|add|sub|div|mul#/#a|[+\-]?[0-9]*\.?[0-9]+([eE][+\-]?[0-9]+|)#/#b|[+\-]?[0-9]*\.?[0-9]+([eE][+\-]?[0-9]+|)#' => 'Aleph\Demo\Arithmetic->route', '/rom2dec/#x|(?i)M*(D?C{0,3}|C[DM])(L?X{0,3}|X[LC])(V?I{0,3}|I[VX])#' => 'Aleph\Demo\Transform->rom2dec', '/dec2rom/#x|[1-9]{1}[0-9]{0,6}#' => 'Aleph\Demo\Transform->dec2rom', '/#method|akkerman|gcd#/#a|[0-9]+#/#b|[0-9]+#' => 'Aleph\Demo\Misc->route', '/sets/#vars|[0-9a-zA-Z\/]+#' => 'Aleph\Demo\Misc->sets'); //      foreach ($map as $url => $act) $a->bind($url, $act); //       $result = $a->route(); //      if ($result !== null) { $a->response()->stop(200, $result); } else { $a->response()->stop(404, file_get_contents('404.html')); } 

ルートマップはキーがクエリに一致する正規表現である配列であり、キーには名前付きパラメーターとして使用される変数(#method | ...#、#a | ...#)を含めることができ、値は必要な対応するメソッドですクラス。

ルートに応じた有効な呼び出しの例:
http://demo.4leph.com/rom2dec/MMDCXCVIII (ローマから10進数への変換)
http://demo.4leph.com/dec2rom/2012(10進からローマへの翻訳)
http://demo.4leph.com/sets/hab/ra/habr (指定されたデータからのセットのバリアントの生成)
http://demo.4leph.com/akkerman/3/3(Ackerman関数の計算、パラメーター値は最大3および3に制限されています。このメソッドの目的は、一定の計算ではなくキャッシュ結果の処理を示すことです)
http://demo.4leph.com/add/1243.454e+45/-2.45 (単純な計算機による計算)

当然、これらの意図的に提示されたアカデミックな例の代わりに、 / product / 1532 / details / a-title-of-product 、さらには/ product / 1532 / detailsに異なる結果を実装することができます/ a-title-of-product/product / 1532 / details /a-title-of- product.xml/product / 1532 / details /a-title-of- product.jsonなど。 お気づきかもしれませんが、これらはすべて非常に簡単に実装できます。

実装について詳しく見てみましょう
 $result = $a->route(); 

フォームdemo.4leph.com/add/1243.454e+45/-2.45をリクエストするAleph \ Demo \ Arithmetic-> routeメソッドがパラメーター'add''1243.454e + 45'および'-2.45'で呼び出されますメソッドの同じ実装を見てみましょう(ファイルアプリ/エンジン/arithmetic.php ):

 <?php namespace Aleph\Demo; class Arithmetic extends Calculator { public function add($a, $b) { return $a + $b; } public function sub($a, $b) { return $a - $b; } public function mul($a, $b) { return $a * $b; } public function div($a, $b) { if ($b == 0) return 'Error: the second argument cannot be zero.'; return $a / $b; } } 

Arithmeticクラスは、 routeメソッドを実装するCalculatorクラスから継承します。

 <?php namespace Aleph\Demo; class Calculator { public function route($method, $a, $b) { if (method_exists($this, $method)) { return call_user_func_array(array($this, $method), array($a, $b)); } return 'Error: method "' . $method . '" doesn\'t exist in class "' . get_class($this) . '"'; } } 

すべてが明らかであり、質問を引き起こすべきではないようです。

setsメソッドは、リクエスト内のsets /に続く行を単一の引数として受け取り、このデータを独自に処理することに注意してください。 ルーターの柔軟性は明らかであり、この形式では、最小限のアクション、たとえばYiiルーティングを使用して置き換えることができます。Yiiルーティングは、ルートがコントローラーとアクションに厳密に割り当てられているにもかかわらず、はるかに難しいこととは異なります。

ルーティングに加えて、デモ例では構成ファイルからの設定の読み込みを実装します-これは通常のiniファイルであり、コードの構成配列に表示されます。 よく使われる練習ですが、トリックはありません。古き良きini

とりわけ、カーネルはキャッシュをサポートしており、カーネルにはデフォルトでフラットファイルのキャッシュ実装が含まれています。 パブリックインターフェイスを使用して利用可能な新しいタイプのキャッシュを追加します。

公式WebサイトのセクションClass Reference and Documentationにあるカーネルの内容に関する詳細情報。

結論の代わりに


公開された部分はこれまでのところ唯一のコアであることに再度注意したいと思います。 急いで比較して、よく知られているソリューションよりも優れているものを尋ねたり、パフォーマンステストを必要としたりしないでください。 パブリッシング、ORM、ページオブジェクトモデル、その他すべてのアプローチについて。 PHP市場が他の専門家によって行われた決定に満ちている場合、非専門家のために専門家によって行われた解決策は、彼らの仕事をより専門的にするために非常に欠けています。

公式サイト
GitHubリポジトリ
デモ例
最初の訪問者を待っている空のフォーラム

Source: https://habr.com/ru/post/J143658/


All Articles