yaf框架整合smarty

yaf的版本为3.3.2

百度出来的教程可能因为版本原因,均会报错:

Fatal error: Declaration of Smarty_Adapter::getScriptPath() must be compatible with Yaf_View_Interface::getScriptPath($request = NULL)。

主要原因是方法getScriptPath有些调整,

对代码进行修改,不报错了,具体代码如下:

<?php
Yaf_Loader::import( APPLICATION_PATH ."/application/library/Smarty/Smarty.class.php");
Yaf_Loader::import( APPLICATION_PATH . "/application/library/Smarty/sysplugins/smarty_internal_templatecompilerbase.php");
Yaf_Loader::import( APPLICATION_PATH . "/application/library/Smarty/sysplugins/smarty_internal_templatelexer.php");
Yaf_Loader::import( APPLICATION_PATH . "/application/library/Smarty/sysplugins/smarty_internal_templateparser.php");
Yaf_Loader::import( APPLICATION_PATH . "/application/library/Smarty/sysplugins/smarty_internal_compilebase.php");
Yaf_Loader::import( APPLICATION_PATH . "/application/library/Smarty/sysplugins/smarty_internal_write_file.php");

class Smarty_Adapter implements Yaf_View_Interface
{
    /**
     * Smarty object
     * @var Smarty
     */
    public $_smarty;
    
    /**
     * Constructor
     *
     * @param string $tmplPath
     * @param array $extraParams
     * @return void
     */
    public function __construct($tmplPath = null, $extraParams = array()) {
        
        Yaf_Loader::import(APPLICATION_PATH . '/application/library/Smarty/bootstrap.php');
        $this->_smarty = new Smarty;
        
        if (null !== $tmplPath) {
            $this->setScriptPath($tmplPath);
        }
        
        foreach ($extraParams as $key => $value) {
            $this->_smarty->$key = $value;
        }
    }
    
    /**
     * Return the template engine object
     *
     * @return Smarty
     */
    public function getEngine() {
        return $this->_smarty;
    }
    
    /**
     * Set the path to the templates
     *
     * @param string $path The directory to set as the path.
     * @return void
     */
    public function setScriptPath($path)
    {
        if (is_readable($path)) {
            $this->_smarty->template_dir = $path;
            return;
        }
        
        throw new Exception('Invalid path provided');
    }
    
    /**
     * Retrieve the current template directory
     *
     * @return string
     */
    public function getScriptPath($request = null)
    {
        return $this->_smarty->template_dir ?? null;
    }
    
    
    /**
     * Alias for setScriptPath
     *
     * @param string $path
     * @param string $prefix Unused
     * @return void
     */
    public function setBasePath($path, $prefix = 'Zend_View')
    {
        return $this->setScriptPath($path);
    }
    
    /**
     * Alias for setScriptPath
     *
     * @param string $path
     * @param string $prefix Unused
     * @return void
     */
    public function addBasePath($path, $prefix = 'Zend_View')
    {
        return $this->setScriptPath($path);
    }
    
    /**
     * Assign a variable to the template
     *
     * @param string $key The variable name.
     * @param mixed $val The variable value.
     * @return void
     */
    public function __set($key, $val)
    {
        $this->_smarty->assign($key, $val);
    }
    
    /**
     * Allows testing with empty() and isset() to work
     *
     * @param string $key
     * @return boolean
     */
    public function __isset($key)
    {
        return (null !== $this->_smarty->get_template_vars($key));
    }
    
    /**
     * Allows unset() on object properties to work
     *
     * @param string $key
     * @return void
     */
    public function __unset($key)
    {
        $this->_smarty->clear_assign($key);
    }
    
    /**
     * Assign variables to the template
     *
     * Allows setting a specific key to the specified value, OR passing
     * an array of key => value pairs to set en masse.
     *
     * @see __set()
     * @param string|array $spec The assignment strategy to use (key or
     * array of key => value pairs)
     * @param mixed $value (Optional) If assigning a named variable,
     * use this as the value.
     * @return void
     */
    public function assign($spec, $value = null) {
        if (is_array($spec)) {
            $this->_smarty->assign($spec);
            return;
        }
        
        $this->_smarty->assign($spec, $value);
    }
    
    /**
     * Clear all assigned variables
     *
     * Clears all variables assigned to Zend_View either via
     * {@link assign()} or property overloading
     * ({@link __get()}/{@link __set()}).
     *
     * @return void
     */
    public function clearVars() {
        $this->_smarty->clear_all_assign();
    }
    
    /**
     * Processes a template and returns the output.
     *
     * @param string $name The template to process.
     * @return string The output.
     */
    public function render($name, $value = NULL) {
        return $this->_smarty->fetch($name);
    }
    
    public function display($name, $value = NULL) {
        echo $this->_smarty->fetch($name);
    }
    
}

修改bootstrap.php的代码

public function _initView(Yaf_Dispatcher $dispatcher) {
	//在这里注册自己的view控制器,例如smarty,firekylin
	Yaf_Dispatcher::getInstance()->disableView(); //关闭其自动渲染
}
	
public function _initSmarty(Yaf_Dispatcher $dispatcher) {
	$smarty = new Smarty_Adapter(null, Yaf_Registry::get("config")->get("smarty"));
	Yaf_Dispatcher::getInstance()->setView($smarty);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Yaf Demo 是一个使用 Yaf 框架开发的示例项目,用于展示 Yaf 框架的基本用法和功能。想要下载 Yaf Demo 可以按照以下步骤进行: 1. 打开 Yaf Demo 的官方网站(可以通过搜索引擎搜索),在首页或者下载页面找到下载链接。 2. 点击下载链接,等待下载文件完成。通常 Yaf Demo 的下载文件是一个压缩包(例如 zip 或 tar.gz 格式)。 3. 下载完成后,解压缩下载的压缩包。可以使用系统自带的解压缩工具,或者第三方解压缩软件,将压缩包中的文件解压到指定目录。 4. 打开解压后的目录,你将会看到 Yaf Demo 的代码。其中包含了 Yaf 框架的核心文件、配置文件、控制器和视图等。 5. 根据 Yaf Demo 的要求配置环境。可能需要安装 PHP、MySQL 等相关软件,并进行一些配置操作。 6. 将 Yaf Demo 的代码部署到你的服务器或本地环境。可以使用 FTP 工具将代码上传到服务器,或者将代码放置到你的 Web 服务器的文件夹中。 7. 配置好数据库等相关信息。根据 Yaf Demo 的文档,修改配置文件中的数据库连接信息,确保 Yaf Demo 能够正确连接到数据库。 8. 打开浏览器,输入 Yaf Demo 的网址,访问 Yaf Demo。根据 Yaf Demo 的要求,在浏览器中输入对应的 URL 地址,即可查看 Yaf Demo 的功能和效果。 总结:通过以上步骤,你就可以下载并运行 Yaf Demo 了。不过,在下载和使用 Yaf Demo 之前,建议先了解 Yaf 框架的基本知识,以便更好地理解和使用 Yaf Demo。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yishiwucheng

码字不易,多多益善

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值