1. Go to this page and download the library: Download tobento/service-view library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
tobento / service-view example snippets
use Tobento\Service\View\View;
use Tobento\Service\View\PhpRenderer;
use Tobento\Service\View\Data;
use Tobento\Service\View\Assets;
use Tobento\Service\Dir\Dirs;
use Tobento\Service\Dir\Dir;
$view = new View(
new PhpRenderer(
new Dirs(
new Dir('home/private/views/'),
)
),
new Data(),
new Assets('home/public/src/', 'https://www.example.com/src/')
);
echo $view->render('about', ['title' => 'About', 'description' => 'Lorem ipsum']);
use Tobento\Service\View\Data;
$data = new Data();
// Set or add data.
$data->set('key', 'value');
$data->add(['key' => 'value']);
// Set or add data for specific view(s) only.
$data->set('key', 'value', 'viewName');
$data->set('key', 'value', ['viewName', 'anotherViewName']);
$data->add(['key' => 'value'], 'viewName');
$data->add(['key' => 'value'], ['viewName', 'anotherViewName']);
// Get data by key.
$key = $data->get('key');
$key = $data->get('key', 'defaultValue');
// Get all data.
$allData = $data->all();
// Get all data for a specific view.
$allData = $data->all('viewName');
// Rename data keys, add data and get them all.
$allData = $data->rename(['key' => 'newKey'])->add(['bar' => 'foo'])->all();
use Tobento\Service\View\Assets;
use Tobento\Service\View\Asset;
use Tobento\Service\View\AssetsHandlerInterface;
$assets = new Assets(
assetDir: 'home/public/src/',
assetUri: 'https://www.example.com/src/'
);
// Assets handler might be used for minifying and/or combining scripts.
// $assets->setAssetsHandler(AssetsHandlerInterface $assetsHandler);
// Adding Assets
$asset = new Asset(
file: 'inc/styles.css',
dir: '',
uri: '',
attributes: [
'data-foo' => '1',
],
order: 7,
group: 'default'
);
$assets->add($asset);
// Creates and adds an Asset::class with default directory and uri set on Assets::class
$assets->asset(file: 'inc/app.js');
$assets->asset(file: 'inc/app.js')
->dir('') // clear directory if needed
->uri('') // clear uri if needed
->group('footer')
->order(10)
->attr('data-foo', 'value')
->attr('async');
// Get all assets.
$allAssets = $assets->all();
// Render the assets. This will only render placeholders.
var_dump($assets->render());
// string(25) "<!-- assets="default" -->"
var_dump($assets->render(group: 'footer'));
// string(24) "<!-- assets="footer" -->"
// Render the assets.
var_dump($assets->flushing($assets->render(group: 'footer')));
// string(57) "<script src="inc/app.js" data-foo="value" async></script>"
// You might clear all assets.
$assets->clear();
use Tobento\Service\Dir\Dir;
use Tobento\Service\Minify\Factory;
use Tobento\Service\Minify\MinifierFactoryInterface;
use Tobento\Service\Minify\MinifierInterface;
use Tobento\Service\View\AssetsHandler;
$assetsHandler = new AssetsHandler(
// Directory where processed assets are stored
storeDir: new Dir('public/assets/build/'),
// Public URI for generated assets
assetUri: 'https://example.com/assets/build/',
// Glob patterns always excluded from processing (default)
skipAlways: ['*.min.css', '*.min.js'],
// Optional logger
logger: null,
)
// Disable versioning if needed.
// Not recommended, as you lose cache-busting.
->versioning(false)
// Define custom minifiers (or disable them entirely).
// Accepts: null | MinifierFactoryInterface | MinifierInterface
->withMinifiers(
css: new Factory\CssMinifierFactory()->except('comments'),
js: new Factory\JavaScriptMinifierFactory(),
// Or disable minifying completely:
// js: null,
// css: null,
)
// Skip minifying specific files.
// Overrides any previously set skip patterns.
->skipMinify(
// Individual files:
'css/foo.css',
'bar.js',
// Useful patterns:
'css/*.legacy.css', // skip all legacy CSS
'js/vendor/*.js', // skip vendor JS
'*/debug/*', // skip any debug folder
'*.bundle.js', // skip pre-bundled JS
)
// Replace files. You may add multiple replacements.
->replace(
file: 'css/foo.css',
with: 'css/bar.css',
)
// Combine multiple files into one. You may add multiple combinations.
->combine(
filename: 'app.css',
files: [
'css/basis.css',
'css/app.css',
]
);
// You may clear all previously built assets
$assetsHandler->clear();
// Assign the asset handler to the Assets instance
$assets->setAssetsHandler($assetsHandler);
use Tobento\Service\View\PhpRenderer;
use Tobento\Service\View\ViewNotFoundException;
use Tobento\Service\Dir\Dirs;
use Tobento\Service\Dir\Dir;
$dirs = new Dirs(
new Dir(dir: 'home/private/views/', priority: 5),
new Dir(dir: 'home/private/theme/views/', priority: 10),
);
$renderer = new PhpRenderer($dirs->sort());
// Render a view.
try {
echo $renderer->render('view', ['title' => 'Title']);
} catch (ViewNotFoundException $e) {
//
}
// Check if a view exists.
if ($renderer->exists('view')) {
//
}
use Tobento\Service\View\ChainRenderer;
use Tobento\Service\View\PhpRenderer;
use Tobento\Service\Dir\Dirs;
use Tobento\Service\View\ViewNotFoundException;
$renderer = new ChainRenderer(
// new TwigRenderer(),
new PhpRenderer(new Dirs()),
);
// Render a view.
try {
echo $renderer->render('view');
} catch (ViewNotFoundException $e) {
//
}
// Check if a view exists.
if ($renderer->exists('view')) {
//
}
use Tobento\Service\View\PhpRenderer;
use Tobento\Service\Dir\Dirs;
use Tobento\Service\View\View;
use Tobento\Service\View\Data;
use Tobento\Service\View\Assets;
$renderer = new PhpRenderer(new Dirs());
$assets = new Assets(
assetDir: 'home/public/src/',
assetUri: 'https://www.example.com/src/'
);
$view = new View($renderer, new Data(), $assets);
// Adding data
$view->data(['key' => 'value']);
$view->with(name: 'title', value: 'Title');
// Get data.
$view->get('key');
$view->get('key', 'defaultValue');
$view->data()->get('key');
// Render a view.
echo $view->render(view: 'inc/header', data: ['key' => 'value']);
// Add a view by key.
$view->add(key: 'inc.view', view: 'inc/view');
// Render the view added by key.
echo $view->render(view: 'inc.view', data: ['key' => 'value']);
// Auto render a view before or after another view.
$view->autoRender(
view: 'inc/meta-tags',
on: 'inc/head',
apply: 'after'
);
// On render a specific view.
$view->on('inc.view', function(array $data, ViewInterface $view): array {
$data['key'] = 'value';
return $data;
});
// Get the assets
$assets = $view->assets();
// Add an asset
$view->asset('app.css');
$view->autoRender(
// The view to render automatically
view: 'inc/meta-tags',
// The view that triggers the auto-render
on: 'inc/head',
// Render 'before' or 'after' the triggering view
apply: 'after'
);
use Tobento\Service\ViewInterface;
$view->on(
// The view key to listen
key: 'inc/view',
// The callback executed before the view is rendered
callback: function(array $data, ViewInterface $view): array {
// Modify or add data passed to the view
$data['title'] = 'Example Title';
// Return the modified data
return $data;
}
);
use Tobento\Service\ViewInterface;
$view->on(
key: '*',
callback: function(array $data, ViewInterface $view, string $key): array {
$data['global'] = 'applied to all views';
return $data;
}
);
// Rendering once only.
if ($view->once(__FILE__)) {
use Tobento\Service\View\PhpRenderer;
use Tobento\Service\Dir\Dirs;
use Tobento\Service\View\View;
use Tobento\Service\View\Data;
use Tobento\Service\View\Assets;
$renderer = new PhpRenderer(new Dirs());
$assets = new Assets(
assetDir: 'home/public/src/',
assetUri: 'https://www.example.com/src/'
);
$view = new View($renderer, new Data(), $assets);
$view->macro('strtoupper', function($value) {
return strtoupper($value);
});
var_dump($view->strtoupper('lorem ipsum'));
// string(11) "LOREM IPSUM"
use Tobento\Service\View\PhpRenderer;
use Tobento\Service\Dir\Dirs;
use Tobento\Service\View\View;
use Tobento\Service\View\Data;
use Tobento\Service\View\Assets;
use Tobento\Service\View\TagsAttributes;
use Tobento\Service\Tag\AttributesInterface;
$renderer = new PhpRenderer(new Dirs());
$assets = new Assets(
assetDir: 'home/public/src/',
assetUri: 'https://www.example.com/src/'
);
$view = new View($renderer, new Data(), $assets);
$view->macro('attr', [new TagsAttributes(), 'get']);
var_dump($view->attr('body') instanceof AttributesInterface);
// bool(true)