这是展示Cgiapp2一些新功能的简短系列教程中的第一篇。在本教程中,您将看到在基于Cgiapp2的应用程序中切换模板引擎是多么容易。
Cgiapp2实现了一个新的回调钩子系统,它基本上是一个观察者模式。Cgiapp2有许多已注册的挂钩,观察者可以附加到这些挂钩上;当一个钩子被触发时,每个附加到它的观察者都会被通知并执行。此外,Cgiapp2提供了一种在您的应用程序中创建其他人可能观察到的新挂钩的方法;这是另一篇文章的主题。
为什么所有这些都在谈论钩子?因为在Cgiapp2中,各种模板操作——初始化、变量赋值和呈现——都被归类为挂钩。为了简单起见和向后兼容,您可以使用函数tmpl_path()
、tmpl_assign()
和load_tmpl()
来调用它们;您也可以使用通用的call_hook()
方法来执行此操作,将挂钩名称作为第一个参数传递。
为了标准化模板操作,我开发了Cgiapp2_Plugin_Template_Interface,这是模板插件的标准接口。任何实现此接口的模板插件都可以使用标准的tmpl_*
方法调用——这意味着开发人员可以随意混合和匹配模板引擎!
由于Cgiapp2及其子类不再需要了解渲染引擎,因此实例化基于Cgiapp2的应用程序的开发人员可以在实例化时选择自己的渲染引擎:
<?php require_once 'Some/Cgiapp2/Application.php'; require_once 'Cgiapp2/Plugin/Savant3.php'; $app = new Some_Cgiapp2_Application($options); $app->run();
在上面的示例中,开发人员X使用Savant3作为模板引擎。现在,假设您是开发人员Y,并且对Smarty有亲和力,并希望将该引擎用于该应用程序。没问题:
<?php require_once 'Some/Cgiapp2/Application.php'; require_once 'Cgiapp2/Plugin/Smarty.php'; $app = new Some_Cgiapp2_Application($options); $app->run();
现在您所要做的就是创建模板的Smarty版本。Cgiapp2不关心它正在渲染哪个引擎;它只是通知最后注册的模板插件。
敬请关注未来几天的更多教程!