1. Go to this page and download the library: Download dakujem/latter 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/ */
$container->set('latte', $container->factory(function () use ($container) {
$engine = new Latte\Engine();
// Configure the file loader to search for templates in a dedicated directory.
$loader = new Latte\Loaders\FileLoader(__DIR__ . '/templates');
$engine->setLoader($loader);
// Set a temporary directory, where compiled Latte templates will be stored.
$engine->setTempDirectory($container->settings['view-temp-dir']);
return $engine;
}));
(new Dakujem\Latter\View)->render(
$response,
'hello.latte',
$params,
$container->get('latte')
);
$container->set('view', function () use ($container) {
$view = new Dakujem\Latter\View();
// optionally set an engine factory (recommended)
$view->setEngine(function () use ($container): Latte\Engine {
return $container->get('latte');
});
return $view;
});
$view = $container->get('view');
// the render calls have gotten shorter:
$view->render($response, 'hello.latte', $params);
$view->register('shopping-cart', function (Runtime $context) {
// This callable is the place to register filters,
// variables and stuff for template named "shopping-cart"
// Do any setup of the Engine that is needed for the template to render correctly
$latte = $context->getEngine();
$latte->addFilter('count', function(){
// return the count of items in the shopping cart here
});
// Template name can be set or changed freely.
// Note that if one only needs to set a nice name for the template to be rendered,
// aliases are a simpler option to do so
$template = 'ClientModule/Cart/list.latte';
// The params can be modified at will, for example to provide defaults
$params = array_merge(['default' => 'value'], $context->getParams());
// the Runtime::toResponse helper method can be used for default rendering
return $context->withTarget($template)->withParams($params);
});
$view->setParam('userName', 'Guest'); // a single parameter
$view->setParams([
'userName' => 'Guest',
'projectName' => 'My Awesome Project',
]); // all parameters at once
$view->register('base-layout', function (Runtime $context) {
// do setup needed for templates using the base layout
$context->getEngine()->addFilter( ... );
// return a context object (!)
return $context;
});
$view->register('--withUser--', function (Runtime $context) {
// do setup common for templates using a `$user` variable
$defaults = [
'user' => get_user( 'somehow' ),
];
// return a context object (!)
return $context->withParams($defaults);
});
// calling a pipeline with 2 _pre-render_ routines and a registered render routine
$view
->pipeline('base-layout', '--withUser--')
->render($response, 'shopping-cart', $params);
// rendering a file with a common _pre-render_ routine
$view
->pipeline('--withUser--')
->render($response, 'userProfile.latte', $params);
$view->register('contacts.latte', $view->pipeline('base-layout', function (Runtime $context) {
// ... do whatever setup needed for rendering the contacts page
return $context->withParams(['foo' => 'bar']);
}));
$view->render($response, 'contacts.latte');
// register a routine named 'ahoy', that will render `hello.latte`
$view->register('ahoy', function (Runtime $context) {
return $context->withTarget('hello.latte');
});
// register a routine that will internally invoke it
$view->register('foo', function (Runtime $context) use ($view) {
return $view->another($context, $view->getRoutine('ahoy'));
});
// render 'hello.latte' using 'foo' routine that internally uses 'ahoy' routine
$view->render($response, 'foo');
$app = Slim\Factory\AppFactory::create();
$engine = new Latte\Engine();
// The section below configures the `{link}` and `n:href` macros and the `urlFor` filter.
$engine->addFilter('urlFor', function ($route, ...$args) use ($app) {
// the filter will call the `urlFor` method of the route parser
return $app->getRouteCollector()->getRouteParser()->urlFor($route, ...$args);
// Note: if you are using slim v3, use `$container->get('router')->pathFor( ... )` instead.
});
$macroSet = new MacroSet($engine->getCompiler());
$linkMacro = function (MacroNode $node, PhpWriter $writer) {
return $writer->using($node)->write('echo ($this->filters->urlFor)(%node.word, %node.args?);');
};
$macroSet->addMacro('link', $linkMacro);
$macroSet->addMacro('href', null, null, function (MacroNode $node, PhpWriter $writer) use ($linkMacro) {
return '