zoukankan      html  css  js  c++  java
  • Yaf + Smarty 整合笔记

    Yaf真的是太简单了,简单到使用mvc的时候在view里面需要手写php脚本。因此考虑整合一下smarty模板引擎。随心所欲也正是yaf的魅力

    Yaf 安装

    这里简单说一下yaf的安装,已经是非常无脑了。下载安装与php版本相对应的yaf.so Yaf扩展下载:https://pecl.php.net/package/yaf
    文档参考:Yaf开发文档
    修改 php.ini
    [yaf]
    ; Yaf Framework
    extension="/usr/lib64/php/modules/yaf.so"
    ; fix Yaf_Loader err
    yaf.use_spl_autoload=On

    开启yaf.use_spl_autoload可以解决下面这个问题
    Warning: Yaf_Loader::autoload() [yaf-loader.autoload]: Failed opening script...

    不过官方建议还是关闭这个选项。

    Smarty

    将Smarty 放入 yaf 的 library 目录里。新建一个 Adapter.php 做接入:

    <?php
    /**
     *
     * @Author: Carl
     * @Since: 2017-11-23 11:45
     * Created by PhpStorm.
     */
    Yaf_Loader::import( "Smarty/Smarty.class.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()) {
            $this->_smarty = new Smarty;
    
            if (null !== $tmplPath) {
                $this->setScriptPath($tmplPath);
            }
            // var_dump($extraParams);
            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()
        {
            return $this->_smarty->template_dir;
        }
    
        /**
         * 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);
        }
    
    }
    

    这里用 Smarty_Adapter 继承了 Yaf 的 view . 将yaf的view的相关方法转交给smarty处理

    Bootstrap

    通过Bootstrap.php 在 yaf 中初始化 smarty

    public function _initSmarty(Yaf_Dispatcher $dispatcher){
        $smarty = new Smarty_Adapter(null , Yaf_Application::app()->getConfig()->smarty);
        Yaf_Dispatcher::getInstance()->setView($smarty);
    }
    

    smarty 配置

    根据自己喜好配置,注意cache文件夹的写入权限

    smarty.left_delimiter   = "<{"
    smarty.right_delimiter  = "}>"
    smarty.template_dir     = APP_PATH "/application/views/"
    smarty.compile_dir      = APP_PATH "/application/cache/compile"
    smarty.cache_dir        = APP_PATH "/application/cache/"
    
    smarty.caching          = 0
  • 相关阅读:
    【工具类】图片压缩工具类,可压缩jpg, png等图片
    【Nginx用法】nginx location正则表达式写法,详解Nginx location 匹配规则(很详细哦)
    【Nginx异常】[error] 4236#29900: OpenEvent(“Global gx_reload_27128“) failed (5: Access is denied)
    【Nginx异常】Nginx启动一闪而过没反应,Nginx双击打开后,没有启动成功,也没有进程,且127.0.0.1:8080访问不到
    开启vue-element-ui打包生成报告
    Cas 5.2.x 使用 实现SSO单点登录的问题
    springmvc在使用@ModelAttribute注解获取Request和Response会产生线程并发不安全问题
    企业微信会话存档开发与问题
    高手怎么查找CPU过高的Java代码。具体到行
    ubuntu中清除开始菜单中的应用图标
  • 原文地址:https://www.cnblogs.com/dapianzi/p/7987482.html
Copyright © 2011-2022 走看看