Skip to content

Configuration ​

This page covers the configuration options available for this plugin, allowing you to customize template rendering behavior for your application needs.

Options ​

Set options via ViewBuilder::setOption() or setOptions():

OptionTypeDefaultDescription
cachebooltrueEnable/disable template caching. Caching is always enabled except when explicitly set to false.
autoRefreshboolfalse (or true in debug)Automatically refresh templates. Auto-refresh is always enabled in debug mode.
fragmentsarray,string'content'Fragment (block) name(s) that should be rendered when autoLayout is disabled. Read more
cachePathstringCACHE . 'latte_view'Path for compiled template cache
sandboxboolfalseEnable sandbox mode for secure template execution. When enabled, the security policy can be configured using setSandboxPolicy() and getSandboxPolicy().
rawphpbooltrueEnable/disable the use of raw PHP code in templates via the {php} tag.
defaultHelpersarray...List of default Cake helpers that need to be present. Defaults to all core helpers.

The fragments option ​

The fragments option controls which template fragments (Latte blocks) are rendered when autoLayout is disabled. This feature enables you to return specific portions of a template without the full layout structure, making it ideal for partial page updates and AJAX responses.

Imagine you have this template

latte
{* users/index.latte *}
<div class="users-index">
    <h1>{block pageTitle}All Users{/block}</h1>
    
    {block userTable}
    <table class="table">
        <thead>
            <tr>
                <th>Name</th>
                <th>Email</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
            {foreach $users as $user}
            <tr>
                <td>{$user->name}</td>
                <td>{$user->email}</td>
                <td>
                    <a n:named="users:view, $user->id">View</a>
                </td>
            </tr>
            {/foreach}
        </tbody>
    </table>
    {/block}
    
    {block pagination}
        {$this->Paginator->numbers()}
    {/block}
</div>

{block content}
    <div class="sidebar">
        <h3>User Management</h3>
        <ul>
            <li><a n:named="users:add">Add New User</a></li>
            <li><a n:named="users:export">Export Users</a></li>
        </ul>
    </div>
{/block}

When configuring the ViewBuilder to return only specific blocks, you can generate focused template fragments for partial page updates or AJAX responses:

php
// In your controller action
public function index()
{
    $users = $this->paginate($this->Users);
    $this->set(compact('users'));
    
    // Handle AJAX requests for partial updates
    if ($this->getRequest()->is('ajax')) {
        // Disable autoLayout for AJAX responses
        $this->viewBuilder()->disableAutoLayout();
        
        // Return only the user table for dynamic updates
        $this->viewBuilder()->setOption('fragments', ['userTable']);
    }
}

public function search()
{
    $query = $this->getRequest()->getQuery('q');
    $users = $this->Users->find('all')
        ->where(['name LIKE' => '%' . $query . '%']);
    $this->set(compact('users'));
    
    if ($this->getRequest()->is('ajax')) {
        $this->viewBuilder()->disableAutoLayout();
        // Return multiple fragments for complex updates
        $this->viewBuilder()->setOption('fragments', ['userTable', 'pagination']);
    }
}

This approach is particularly useful for:

  • AJAX-powered dynamic content updates
  • Optimizing performance by sending only the necessary HTML fragments
  • More info here