This is the first in a short series of tutorials showcasing some of the new features of Cgiapp2. In this tutorial, you will see how easy it is to switch template engines in Cgiapp2-based applications.
Cgiapp2 implements a new callback hook system, which is basically an Observer pattern. Cgiapp2 has a number of registered hooks to which observers can attach; when a hook is triggered, each observer attached to it is notified and executed. Additionally, Cgiapp2 provides a means to create new hooks in your applications that others may observer; that's a subject for another post.
Why all this talk about hooks? Because in Cgiapp2, the various template actions — initialization, variable assignment, and rendering — are relegated to hooks. For simplicity's sake, and for backward compatibility, you can use the functions
load_tmpl() to invoke them; you could also use the generic
call_hook() method to do so, passing the hook name as the first argument.
To standardize template actions, I developed Cgiapp2_Plugin_Template_Interface, a standard interface for template plugins. Any template plugin that implements this interface can be called with the standard
tmpl_* methods — which means that developers can mix-and-match template engines at will!
Since Cgiapp2 and its subclasses no longer need to be aware of the rendering engine, developers that are instantiating Cgiapp2-based applications can choose their own rendering engine at the time of instantiation:
<?php require_once 'Some/Cgiapp2/Application.php'; require_once 'Cgiapp2/Plugin/Savant3.php'; $app = new Some_Cgiapp2_Application($options); $app->run();
In the example above, developer X uses Savant3 as the template engine. Now, say you're developer Y, and have an affinity for Smarty, and want to use that engine for the application. No problem:
<?php require_once 'Some/Cgiapp2/Application.php'; require_once 'Cgiapp2/Plugin/Smarty.php'; $app = new Some_Cgiapp2_Application($options); $app->run();
Now all you have to do is create Smarty versions of the templates. Cgiapp2 doesn't care to which engine it's rendering; it simply notifies the last registered template plugin.
Stay tuned for more tutorials in the coming days!