FatFree Frameworkの少しの経験

背景

プログラミングを行う同様のシステムに似た、オンライン物理学コンテストのプロジェクトを作成することは、私の頭の中では長い間考えられていました。 しかし、時間の不足、知識の欠如、 怠inessさ 、そして最も重要なこととして、 わかりやすく理解しやすいフレームワークまたはCMSが常にプロジェクトの実装を妨げていました。

自転車の発明

最初の目標は(最初)後でプロジェクトを行うための非常に「基本的なシステム」を開発することだったので、仕事に腰を落ち着けようとする最初のけいれん的な試みは悲しそうに見えました。 おそらく、3回目の失敗に終わり、自分の間違いに気付いた後、私はシンプルで理解しやすいフレームワークを探し始めました。 選択はFatFree Frameworkにかかっていました。

F3とも呼ばれるFatFree Frameworkについて簡単に説明します

最初の知り合いはHabr http://habrahabr.ru/post/103167/ 、およびhttp://habrahabr.ru/post/135619/への投稿から始まりました。
以前の投稿で書かれた内容を繰り返すことはしませんが、F3を使用したロボットでの私の小さな経験を紹介するようにします。

モジュール性を計画しています。

実際、F3では、ファイルを接続するためのパスは次のように設定されています
F3::Set('INCLUDE','path/to/files'); 

そして、プロジェクトはモジュール性を前提としていたため、ルートを次のように処理することを期待していました。
  F3::Set('INCLUDE','path/to/module-1'); F3::route('GET /module1/action1','action1.php'); F3::route('GET /module1/action2','action2.php'); ... F3::Set('INCLUDE','path/to/module-2'); F3::route('GET /module2/action1','action1.php'); F3::route('GET /module2/action2','action2.php'); 

しかし、スクリプトはFINAL INCLUDE値のみを設定し、当然のことながらエラーが発生しました。
煙突の間に出口が明らかになりました...
 F3::Set('INCLUDE','path/to/'); F3::route('GET /module1/action1','module1/action1.php'); F3::route('GET /module1/action2','module1/action2.php'); ... F3::Set('INCLUDE','path/to/'); F3::route('GET /module2/action1','module2/action1.php'); F3::route('GET /module2/action2','module2/action2.php'); 

しかし、時間が経つにつれて、この決定は忘却に陥り、主にindex.phpを中心に大量のルートを作成します。 その結果、特定のルートがindex.phpファイル(modules / moduleN / index.php)のモジュールフォルダーに再配置されました
ただし、メインインデックスファイルには、モジュールの接続のみが残ります。 例:
 //Modules F3::call('blog/index.php'); F3::call('ftest/index.php'); F3::call('users/index.php'); 


DBを使用する

F3に関する以前の投稿では、テーブルの名前を渡す必要がある素晴らしいAxonクラスを通じてデータベースの操作が示され、結果とともに2次元配列が返されました。 最初はクールだと思っていましたが、2つまたは3つのテーブルからの複雑なクエリについては、いくつかの条件が想定されていましたか?
プロジェクトの軸索はすぐに平凡な機能を置き換えました
 DB::sql("Select ...") 

結果は配列を使用して返されます
 F3::get('DB->result') 

さらに、foreachを使用するか、<F3 :: repeat>を使用してテンプレートで直接使用しても、データを処理するのに問題はありません。
興味深い点。 DB :: sql( "Select ...")の結果がデータベースの1行になることが事前にわかっている場合、連想配列を取得することは難しくありません。
 $array=F3::get('DB->result[0]') 

たとえばCOUNT(id)を取得する必要がある場合、次のように記述できます。
 F3::get('DB->result[0]["COUNT(id)"]') 

最後に、データベースの操作についてもう1つ、次のように現在のセッションの最後に追加されたレコードのインデックスを見つけることができます。
 F3::get('DB')->pdo->lastInsertId(); 


安全性

考えられるすべての欠点を予測することは現実的ではありません。 したがって、F3フォーラムでエラーの単純な「スタブ」が見つかりました。もちろん、意図的なハッキングからは救われませんが、少なくともいくつかのエラーを隠して装飾します
 if (F3::get('DEBUG') == 0) F3::set('ONERROR', function () { echo Template::serve('error404.html'); die(); } ); 


最後に

F3コードには多くの興味深いことがあり、さらに多くのコメントがあります。
プロジェクトfatfree.sourceforge.netの公式ドキュメント
ご存知のように、経験全体が1つの投稿に収まらないため、どこかが間違っている場合は、ご容赦ください。 ありがとう

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


All Articles