首页 » PHP技术 » sae下使用yaf开发之smarty

sae下使用yaf开发之smarty

 

终于鼓起勇气挤出晚上时间,开始使用鸟哥的yaf做点东西,感谢lvyi1大大给通过试用yaf审批。
今天晚上主要做了把smarty与sae yaf 相结合使用,注意,重构自己的类的时候,一定要与文档的参数相符合,要不会很惨的
按照教程,主要是修改了两个文件
1.Bootstrap.php
[php]<?php

/**
* 所有在Bootstrap类中, 以_init开头的方法, 都会被Yaf调用,
* 这些方法, 都接受一个参数:Yaf_Dispatcher $dispatcher
* 调用的次序, 和申明的次序相同
*/
class Bootstrap extends Yaf_Bootstrap_Abstract {

public function _initSmarty(Yaf_Dispatcher $dispatcher) {
$smarty = new Smarty_Adapter(APP_PATH.'/views/', Yaf_Registry::get("config")->get("smarty"));
Yaf_Dispatcher::getInstance()->setView($smarty);
}
public function init(){
Yaf_Dispatcher::getInstance()->disableView();
}

}[/php]
2.Smarty_Adapter.php 此个文件放在 你的lib 下边,类名是有规律的,下划线表示 Smarty目录下的Adapter.php文件 此处不要把大小写弄混了,因为服务器一般都是linux,区分大小写的
我把我找网上的资料写的文件给附录在最后,以供参考
其中碰到的问题是sae并不支持本地的读写,所以用了memcache,但是 [php]smarty.compile_dir = "saemc://templates_c/";[/php] 这样写php报错说文件夹不存在,于是在初始化smarty的时候,我又做了一件事情[php]if(!is_dir($extraParams['compile_dir'])){
mkdir($extraParams['compile_dir']);
}[/php]

最后附上Smarty_Adapter.php的源码以供参考
[php]
<?php

/**
* 视图引擎定义
* 作者:taililong 2012年10月30日
* 学习点:使用了arrayObject的方法,可以让smarty assign更好用,省代码 o(∩_∩)o 哈哈
* Smarty/Adapter.php
*/
class Smarty_Adapter implements Yaf_View_Interface {

/**
* Smarty object
* @var Smarty
*/
public $_smarty;
public $vvar;
/**
* Constructor
*
* @param string $tmplPath
* @param array $extraParams
* @return void
*/
public function __construct($tmplPath = null, $extraParams = array()) {

require "Smarty.class.php";
$this->_smarty = new Smarty;

if (null !== $tmplPath) {
$this->setScriptPath($tmplPath);
}
if(!is_dir($extraParams['compile_dir'])){
mkdir($extraParams['compile_dir']);
}
foreach ($extraParams as $key => $value) {
$this->_smarty->$key = $value;
}
$this->vvar=new ArrayObject(array(),ArrayObject::ARRAY_AS_PROPS);//可以更方便的设置模版变量
}

/**
* Return the template engine object
*
*/
public function getEngine() {
return $this->_smarty;
}

public function setScriptPath($path)
{
if (is_readable($path)) {
$this->_smarty->template_dir = $path;
return;
}

throw new Exception('Invalid path provided');
}

public function getScriptPath()
{
return $this->_smarty->template_dir;
}

public function setBasePath($path, $prefix = 'Zend_View')
{
return $this->setScriptPath($path);
}

public function addBasePath($path, $prefix = 'Zend_View')
{
return $this->setScriptPath($path);
}

public function __set($key, $val)
{
$this->_smarty->assign($key, $val);
}

public function __isset($key)
{
return (null !== $this->_smarty->get_template_vars($key));
}

public function __unset($key)
{
$this->_smarty->clear_assign($key);
}

public function assign($spec, $value = null) {
if (is_array($spec)) {
$this->_smarty->assign($spec);
return;
}

$this->_smarty->assign($spec, $value);
}

public function clearVars() {
$this->_smarty->clear_all_assign();
}

public function render($name, $value = NULL) {
return $this->_smarty->fetch($name);
}

public function display($name, $value = NULL) {
$arr= $this->vvar->getArrayCopy();
$this->_smarty->assign($arr);//此处不明白display的调用,去掉了$this->_smarty->display($name);
}

}

?>[/php]

原文链接:sae下使用yaf开发之smarty,转载请注明来源!

0