Bricks: конструктор для новичков

1.27K
.
Сессии
В пакете Bricks.Http.Session нет ничего необычного. Это просто объектная обертка для работы с сессиями в PHP.

Легко понять, как работает этот пакет на простом примере:
use Bricks\Http\Session\Session;

...

$session = new Session;
$session->user = $user;


Другими словами, вы работаете с сессией как с объектом, инициализируя его свойства и изменяя его состояние. Разница лишь в том, что этот объект пермаментен и связан с текущей сессией пользователя.

Получить доступ к сохраненным в сессии данным можно так же просто:

use Bricks\Http\Session\Session;

...

$session = new Session;
$user = $session->user;
var_dump($user->id);
.
Delphinum
Шаблонизатор
Пакет Bricks.TemplateEngine.Php создавался с учетом того, что язык PHP в целом есть шаблонизатор. Вы не найдете в синтаксисе, используемом данным пакетом для шаблонизации ничего, кроме стандартных средств языка PHP, что делает его максимально быстрым, простым в освоении и функциональным в использовании.

Рассмотрим пример использования данного шаблонизатора для рендеринга простой HTML страницы (расположенной в файле page.html) следующего содержания:
<html>
<head>
<title><?= $title ?></title>
</head>
<body>
<?= $content ?>
</body>
</html>


Для рендеринга этой страницы достаточно выполнить интерпретацию содержимого с помощью PHP, указав необходимые переменные окружения ($title и $content):
<?php
use Bricks\TemplateEngine\Php\Template;

$template = new Template('page.html');
$template->title = 'Моя страница';
$template->content = 'Любой контент';
echo $template;


В результате мы получим страницу следующего содержания:
<html>
<head>
<title>Моя страница</title>
</head>
<body>
    Любой контент
</body>
</html>


Возможно вы уже заметили, что рендеринг страницы происходит в момент преобразования объекта шаблона в строку. Это позволяет нам не только выводить шаблон в окно браузера, но и сохранять его в файл (на пример):
<?php
use Bricks\TemplateEngine\Php\Template;

$template = new Template('page.html');
$template->title = 'Моя страница';
$template->content = 'Любой контент';
file_put_contents('page.swp.html', $template);


Используя этот принцип, можно легко реализовать кэш шаблонизатора, что позволит уменьшить время отклика системы.

Важно так же отметить, что данный шаблонизатор можно использовать для рендеринга текстовых данных любого типа (page.md):
# <?= $title ?>
<?= $content ?>


<?php
use Bricks\TemplateEngine\Php\Template;

$template = new Template('page.md');
$template->title = 'Моя страница';
$template->content = 'Любой контент';
echo $template;


Архив с примером
.
$template = new Template('page.md');
файл в конструкторе, это же не гибко
.
ramzes, для рендеринга используется include, оттого и применяется такое решение. С другой стороны любые части шаблона достаточно статичны, чтобы хранить их в файлах и подключать внутри другого шаблона, а не рендерить в виде строки и вставлять "руками".
.
reaper
ramzes, Всё там нормально. Я бы удивился, если бы была возможность переопределить путь к файлу.
Разные шаблоны требуют разные данные. В этом случае переиспользование объекта с другим шаблоном далеко не самая лучшая идея, т.к. это может привести к трудноотлавливаемым ошибкам, да и вообще хрень какая-то получается.
.
reaper, а, так речь о каком нить методе типа setFilePath? Да, экземпляр шаблонизатора напрямую связан с файлом, который он рендерит.
.
Delphinum, Я не знаю, как он хочет. Скорее всего вместо вместо представления шаблона в виде объекта предлагается более распространённое решение -- использовать сервис с методом, который будет принимать имя шаблона со словарём.
.
reaper, такое лучше решается с помощью одной функции, чем с помощью целого класса )
.
Delphinum, В простых случаях разумеется так, но надо же конфиг где-то хранить (как пути резолвить например), расширения там всякие и куча прочих мелких вещей.
.
# reaper (31.12.2015 / 02:39)
ramzes, Всё там нормально. Я бы удивился, если бы была возможность переопределить путь к файлу.
Разные шаблоны требуют разные данные. В этом случае переиспользование объекта с другим шаблоном далеко
шаблон такая же переменная как и любой др параметр.
х.з. че там за хрень у тебя получается, задай ты шаблон в конструкторе, или в деструкторе, ни чего не изменится в процессе рендинга, изменится только подход, и то не сильно
палец в опу или в опу палец, что вонючее?
$smarty->imagepath="templates/";

$smarty->register_outputfilter('editImagePath');

$smarty->display('index.tpl');
Всего: 49