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 tmpl_path(), tmpl_assign(), and 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!
Right on the tails of a new release of the Cgiapp set of libraries, Matthew O'Phinney has posted a first tutorial in a series covering its usage. In this tutorial, he looks at a creating a "template switcher" for Cgiapp2-based applications.
Tracked: Feb 29, 13:48