{% else-1 %}
Обновить | Подписаться | Поднять тему
Чтобы выполнить действие авторизируйтесь или пройдите регистрацию на сайте.
1.
3KZO * 4.92
[автор] (31 янв 2017, 10:48) [0/0] [0] [отв] [спам] [под] +1 | -1

Всем салют.
Не так давно занялся небольшим проектом.
Суть в чём, возникла идея, скажем немного е.анутая, но всё же..

[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]


Как вы смотрите на это?


From paradise with love
2. (31 янв 2017, 10:58) [0/0] [0] [отв] [спам] [под] +1 | -1

можно код на гист или куда-то еще? а то все в один столбик

3.
3KZO * 4.92
[автор] (31 янв 2017, 11:04) [0/0] [0] [отв] [спам] [под] +1 | -1

http://dumpz.org/2496563/


From paradise with love
4.
MyZik * 3.1
(31 янв 2017, 11:04) [0/0] [0] [отв] [спам] [под] +1 | -1

Зачем делать такое убожество? Перестаньте уже везде и всюду пихать DCMS.

5.
3KZO * 4.92
[автор] (31 янв 2017, 11:06) [0/0] [0] [отв] [спам] [под] +1 | -1

ты вообще суть понял? при чем здесь дцмс, если речь идёт об Buffered Output, т.е о беферезованном выводе, умник ты..


From paradise with love
6. (31 янв 2017, 11:07) [0/0] [0] [отв] [спам] [под] +1 | -1

3KZO, Зачем статика, есть di

7.
3KZO * 4.92
[автор] (31 янв 2017, 11:57) [0/0] [0] [отв] [спам] [под] +1 | -1

не всегда удобно с ним работать.


From paradise with love
  • 1 из 1
Чтобы писать сообщения авторизируйтесь или пройдите регистрацию на сайте.
Подписаны: 0
Скачать тему | Файлы темы | Фильтр сообщений