Welcome Guest, Not a member yet? Register   Sign In
Smarty with CI4
#1

Hi, I'm trying to get Smarty (v4) working with CI4. Googling around, I found this https://forum.codeigniter.com/showthread...#pid377901 but it seems to be missing ThirdParty/Smarty/Autoloader.php as the error message reports.

Reading the CI4 docs, I don't really understand how I would get the library working.

Does someone have a working tutorial?

Thanks.
Reply
#2

(This post was last modified: 02-12-2024, 11:39 AM by n2fole00.)

Ok, I got something working Smile

Well I decided to go with Twig, but I think the same idea will work for Smarty.

Source info: https://twig.symfony.com/doc/3.x/intro.h...-api-usage

First install twig with composer.
Code:
composer require "twig/twig:^3.0"


In BaseController.php

PHP Code:
namespace App\Controllers;
...
use 
Twig;

abstract class 
BaseController extends Controller
{
    ...
    protected $twig;

    public function initController(RequestInterface $requestResponseInterface $responseLoggerInterface $logger)
    {
        // Do Not Edit This Line
        parent::initController($request$response$logger);

        // Preload any models, libraries, etc, here.
        $this->initTwig();
    }

    private function initTwig(): void {
        $loader = new Twig\Loader\FilesystemLoader(APPPATH.'Views');
        $this->twig = new Twig\Environment($loader, [
            'cache' => ENVIRONMENT === 'development' false APPPATH.'writable/cache',
            'debug' => ENVIRONMENT === 'development' true false,
        ]);
        $this->twig->addExtension(new \Twig\Extension\DebugExtension()); // add this if you want to run the {{ dump() }} function
    }

    protected function twigRender(string $filename, array $dataArray)  {
        echo $this->twig->render($filename$dataArray);
    }



Then in your controller

PHP Code:
namespace App\Controllers;

class 
Test extends BaseController
{
    public function index()
    {
        // echo $this->twig->render('test.twig', ['name' => 'Noel']);
        $this->twigRender('test.twig', ['name' => 'Noel']);
    }


Here, I created twigRender as an alternative to

PHP Code:
echo $this->twig->render('test.twig', ['name' => 'Noel']); 


but it's not required.
Reply
Reply




Theme © iAndrew 2016 - Forum software by © MyBB