Всем салют.
Не так давно занялся небольшим проектом.
Суть в чём, возникла идея, скажем немного е.анутая, но всё же..
[code]<?
/**
* Удалён Atom PHP Framework
* Удалён 3kZO
*/
Удалён
define('H', __DIR__);
include_once __DIR__ . '/autoload.php';
include_once __DIR__ . '/framework/Atom.php';
include_once __DIR__ . '/functions.php';
include_once __DIR__ . '/app/bootstrap.php';
Atom::bind('debug', true);
Atom::start();
[/code]
Запускаем ядро.
[code]<?
/**
* Удалён Atom PHP Framework
* Удалён 3kZO
*/
namespace AppControllers;
use Atom;
use AtomHttpResponse;
use AtomHttpRequest;
use Atomdocument;
class Welcome
extends AtomController
{
public function Index()
{
if ($this->user === null)
{
Удалён /user/login');
exit;
}
$app = Atom::app();
$bind = [];
if ($this->user !== null)
{
$bind['user'] = $this->user;
}
$doc = new document($bind);
$doc->title = 'Добро пожаловать';
$this->asHTML( $doc->render() );
}
}
[/code]
Да, да, да прошу прощения за Удалён давно не писал на php
Продолжаем, суть в чём.
Св-ва контроллера
[code] /**
* Выдача в формате HTML
*
* Удалён string $content
*/
public function asHTML($content)
{
Response::status(response::HTTP_OK);
// Response::setCharset('utf-8');
Response::setContentType('text/html');
Response::setContent($content);
}
[/code]
и собсно говоря что делает наш документ (document) он же подобие дцмсной системы вывода
[code]<?
/**
* Удалён Atom PHP Framework
* Удалён 3kZO
*/
namespace Atom;
use Atom;
use AtomioBufferedOutput;
class document
{
/**
* Шаблонизатор
* Удалён object
*/
private $_tpl;
/**
* Буферизация вывода
* Удалён object
*/
private $_buf;
/**
* Заголовок
* Удалён string
*/
public $title = '';
public $description = '';
public $keywords = '';
/**
* Конструктор класса
*
* Удалён array $bind
*/
public function __construct(array $bind = [])
{
$this->_tpl = new Template(H . '/app/templates');
foreach($bind as $key => $val)
{
$this->_tpl->assign($key, $val);
}
$this->_buf = new BufferedOutput(true);
}
/**
* Выдача
*
* Удалён string
*/
public function render()
{
$content = $this->_buf->toString();
$this->_buf->close();
return $this->_tpl->render('document', [
'title' => $this->title,
'description' => $this->description,
'keywords' => $this->keywords,
'content' => $content
]);
}
}[/code]
Буферизация вывода, упрощена.
[code]<?
/**
* Удалён Atom PHP Framework
* Удалён 3kZO
*/
namespace Atomio;
class BufferedOutput
{
private $_enabled = false;
public function __construct($auto = false)
{
if ($auto)
{
$this->start();
}
}
public function start()
{
if ( ! $this->_enabled )
{
ob_start();
$this->_enabled = true;
}
return $this;
}
public function toString()
{
if ($this->_enabled)
{
return ob_get_contents();
}
}
public function flush()
{
if ($this>_enabled)
{
ob_flush();
}
return $this;
}
public function clean()
{
if ($this->_enabled)
{
ob_clean();
}
return $this;
}
public function close()
{
if ($this->_enabled)
{
ob_end_clean();
$this->_enabled = false;
}
return $this;
}
}[/code]
Так вот, всё что находится до рендеринга будет выведено на экран по принципу echo, то есть, без лишних затрат сил на создание отдельного представления.., т. е
[code]
$doc = new document($bind);
$doc->title = 'Добро пожаловать';
echo 'ololo';
$this->asHTML( $doc->render() );
[/code]
Но были мысли написать и UI (User Interface) по то му же принципу.
[code]
<?
/**
* Удалён Atom PHP Framework
* Удалён 3kZO
*/
namespace Atom;
use AtomioBufferedOutput;
class UI
{
/**
* Буферизация вывода
*
* Удалён object
*/
private $_buf;
/**
* Конструктор класса
*/
public function __construct()
{
$this->_buf = new BufferedOutput(true);
}
/**
* Выдача
*
* Удалён string
*/
public function render()
{
$content = $this->_buf->toString();
return $content;
}
/**
* Отображение
*
* Удалён void
*/
public function display()
{
$this->_buf->flush();
}
public function __destruct()
{
$this->_buf->close();
}
}
[/code]
Как вы смотрите на это?