Простая, но масштабируемая объектно-ориентированная структура веб-приложений.
Простой пример:
<?php
require_once 'Phapp.php';
class Hello extends PhappView
{
public function response()
{
return 'Hello World.';
}
}
$app = new Phapp();
echo $app->process( 'Hello' );
Найдите это и более сложные примеры в ветвях образцов.
Идея состоит в том, чтобы определить набор объектов представления, которые обрабатываются основным объектом приложения.
Каждый объект представления наследует от Phappview, который имеет два основных метода, которые вы должны перезаписать. Первый - это запрос ():
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, чтобы полностью понять ее концепцию.
Подкласс Phapp и Phappview, чтобы добавить методы для доступа к базе данных, интернационализации и тому подобного.
Это хорошая идея, чтобы настроить базовый вид, который содержит общие методы и выводит ваши взгляды из этого.
Если вы используете 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 в качестве подмодуля или подчинения в репозиторий вашего проекта, чтобы иметь возможность быстро и легко обновлять.