Integrate the Pesto template engine into your CakePHP projects to create expressive and modern views.
Start by installing Pesto via Composer.
composer require millancore/pesto
Create a custom View class at src/View/PestoView.php that extends CakePHP's View.
namespace App\View;
use Cake\View\View;
use MillanCore\Pesto\PestoFactory;
class PestoView extends View
{
protected $pesto;
public function initialize(): void
{
parent::initialize();
$this->pesto = PestoFactory::create(
ROOT . '/templates',
ROOT . '/tmp/cache/pesto'
);
}
protected function _render(string $templateFile, array $data = []): string
{
$relative = str_replace(ROOT . '/templates/', '', $templateFile);
return $this->pesto->make($relative, array_merge(
$this->viewVars,
$data
))->toHtml();
}
}
In your controller, set the view class to use PestoView.
namespace App\Controller;
class ArticlesController extends AppController
{
public function initialize(): void
{
parent::initialize();
$this->viewBuilder()->setClassName('Pesto');
}
}
Use the standard CakePHP set() method to pass data to your Pesto templates.
namespace App\Controller;
class ArticlesController extends AppController
{
public function index()
{
$articles = $this->Articles->find('all')->toArray();
$this->set(compact('articles'));
}
}
Create your template at templates/Articles/index.php. You can now use Pesto's syntax.
<h1>Articles</h1>
<ul>
<li php-foreach="$articles as $article">
{{ $article->title }}
</li>
</ul>