Phapp
1.0.0
シンプルだがスケーラブルなオブジェクト指向のWebアプリケーションフレームワーク。
簡単な例:
<?php
require_once 'Phapp.php';
class Hello extends PhappView
{
public function response()
{
return 'Hello World.';
}
}
$app = new Phapp();
echo $app->process( 'Hello' );
サンプルブランチでこれとより複雑な例を見つけてください。
アイデアは、メインアプリケーションオブジェクトによって処理される一連のビューオブジェクトを定義することです。
すべてのビューオブジェクトは、上書きする必要がある2つの主要なメソッドがあるPhappviewから継承します。最初はrequest()です。
public function request()
{
if( !$_REQUEST['order_number'] )
return 'Home';
return null;
}
この方法の目的は、リクエストを処理し、必要に応じて引き継ぐべき別のビューの名前を返すことです。
nullを返す最初のビューは、リクエストに応答するために呼び出される応答()メソッドを取得します。
public function response()
{
return '<h1>Hello</h1>';
}
これは、すべてがどのように連携するかを示す小さなグラフです:
+----------------------------+
| Name of a PhappView object | <-------------------------+
+----------------------------+ |
| |
| |
+-- Phapp ------|-------+ |
| | | |
| V | |
| +------------------------+ +-- PhappView ---------+ |
| | Construct object | ------> | | |
| +------------------------+ | Object derived | |
| | | | from PhappView | |
| V | | | |
| +------------------------+ +-- request() ---------+ |
| | Call request() on | | | |
| | that object | ------> | Determine if | |
| +------------------------+ | this object | |
| | | can handle | |
| +------------------------+ yes? | this request | no? |
| | request() returned | <------ | | -----+
| | null | +-- response() --------+
| | so call response() | ------> | |
| | to get the output | <------ | Generate output for |
| +------------------------+ html | this request |
| | | | |
+---------------|-------+ +----------------------+
|
V
+----------+
| Web page |
+----------+
Phappは非常に最小限で非常に小さいです。 phapp.phpを見て、その概念を完全に理解してください。
データベースアクセス、国際化などのメソッドを追加するサブクラスファップとファップビュー。
一般的な方法を含むベースビューをセットアップし、それからあなたのビューを導き出すことをお勧めします。
PDOを使用している場合、Phapppdoviewからの意見を継承し、次のようにquery()を呼び出すことができます。
if( ($result = $this->query(
"SELECT
first,
last
FROM members
WHERE last_login = ?
ORDER BY last",
$lastLogin )) )
{
while( ($row = $result->fetch()) )
{
$contents .= "<li>{$row['first']} {$row['last']}</li>";
}
}
おそらく、Phappをサブモジュールまたはサブツリーとしてプロジェクトのリポジトリに追加して、高速かつ簡単に更新できるようにするのが最善です。