zf+smarty模块化配置

整了好几个小时看了无数个手册终于弄好。。。:'(
入口文件(index.php)的代码:[code]<?php
/**
*  Create On 2010-4-24
*  Author Been
*  QQ:281443751
*  Email:binbin1129@126.com
**/
error_reporting(E_ALL|E_STRICT);
date_default_timezone_set('Asia/Shanghai');
ini_set('include_path',get_include_path() .
                                                  PATH_SEPARATOR ."./lib" .
                                                  PATH_SEPARATOR ."./model");
//require_once("Zend/Loader.php");
//Zend_Loader::registerAutoload();
require('Zend/Loader/Autoloader.php');
Zend_Loader_Autoloader::getInstance()->setFallbackAutoloader(true);

$config = new Zend_Config_Ini('./conf/setting.ini','news');
Zend_Registry::set('config',$config);
$front=Zend_Controller_Front::getInstance();
//$front->setBaseUrl($config->weburl);
//$front->registerPlugin(new Plugin_My());
//echo $front->getBaseUrl();
//模块化目录
$front->setModuleControllerDirectoryName('controllers');//模块下放控制器得目录名
$front->addModuleDirectory($config->paths->base.'/modules');
$front->setParam('useDefaultControllerAlways', true);
//$front->setRequest(new Zend_Controller_Request_Http());
//echo $front->getDefaultModule();
//非模块化目录
//$front->setControllerDirectory($config->paths->base.'/controller');

  //数据库设置---------------------------------------------------------------------
$params=array('host'                =>        $config->database->hostname,
                                 'username'        =>        $config->database->username,
                                 'password'        =>        $config->database->password,
                                 'dbname'        =>        $config->database->database);
$db = Zend_Db::factory($config->database->type,$params);
$db->query('set names '.$config->database->charset.';');
Zend_Db_Table::setDefaultAdapter($db);
Zend_Registry::set('db',$db);

//使用插件
$front->registerPlugin(new Plugin_Smarty());

//$front->throwExceptions(true);
//分发
$front->dispatch();[/code]关键在上边那个plugin_Smarty插件。。
下面看下这个插件得代码:[code]<?php
/**
*  Create On 2010-5-3
*  Author Been
*  QQ:281443751
*  Email:binbin1129@126.com
**/
class Plugin_Smarty extends Zend_Controller_Plugin_Abstract
{
    public function routeStartup(Zend_Controller_Request_Abstract $request)
    {
//echo $this->getRequest()->module;
            //$this->getResponse()->appendBody("<p>routeStartup() called</p>/n");
            
    }

    public function routeShutdown(Zend_Controller_Request_Abstract $request)
    {
        $config=Zend_Registry::get('config');
            $vr=new Zend_Controller_Action_Helper_ViewRenderer();
            //echo $this->getRequest()->module;
            $vr->setView(new Templater($this->getRequest()->module));
                 $vr->setViewSuffix($config->view->suffix);
                 Zend_Controller_Action_HelperBroker::addHelper($vr);
            // $this->getResponse()->appendBody("<p>routeShutdown() called</p>/n");
    }

    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
    {
        
            //echo $this->getRequest()->module;
            //$this->getResponse()->appendBody("<p>dispatchLoopStartup() called</p>/n");
    }

    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        //echo $this->getRequest()->module;
        //$this->getResponse()->appendBody("<p>preDispatch() called</p>/n");
    }

    public function postDispatch(Zend_Controller_Request_Abstract $request)
    {
       //echo $this->getRequest()->module;
        //$this->getResponse()->appendBody("<p>postDispatch() called</p>/n");
    }

    public function dispatchLoopShutdown()
    {
       //echo $this->getRequest()->module;
       // $this->getResponse()->appendBody("<p>dispatchLoopShutdown() called</p>/n");
    }
}
[/code]看一下Templater类得代码:[code]<?php
/*
* Created on 2010-2-18
* Author: been <binbin1129@126.com>
* qq��281443751
*/
class Templater extends Zend_View_Abstract{

         protected $_path;
         protected $_engine;


         public function __construct($moduleName){
                 $config=Zend_Registry::get('config');

                 require_once('Smarty/Smarty.class.php');
                 $this->_engine=new Smarty();
                 
                 $this->_engine->left_delimiter         =         $config->view->left_delimiter;
                $this->_engine->right_delimiter =         $config->view->right_delimiter;
                 $this->_engine->template_dir        =        $config->paths->templates."/".$moduleName;
                $this->_engine->compile_dir                =        sprintf('%s/tmp/tpl_c/%s',$config->paths->data,$moduleName);
                $this->_engine->plugins_dir                =        array($config->paths->base.'/lib/Templater/plugins','plugins');

         }

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

         public function __get($key){
                 return $this->_engine->get_template_vars($key);
         }

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

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

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

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

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

         public function render($name){
                 return $this->_engine->fetch(strtolower($name));
         }

         public function _run(){

         }


}
?>
[/code]说下原理。。
首 先让拓展Zend_View_Abstract让smarty融入到zf中,关键是smarty得模板路径不好整,因为模块化得嘛,当然模板文件也要模块 化了,所一smarty得template_dir就得动态得配置。这就需要在生成templater实例时根据当前得模块设置当前模快所调用得模板路 径。又因为当前得模块名必须要在router以后才能通过request对象获取到,所以又得写道插件里。。。。所以代码就是那么写的了。。。。

内容概要:本文详细介绍了一种基于Simulink的表贴式永磁同步电机(SPMSM)有限控制集模型预测电流控制(FCS-MPCC)仿真系统。通过构建PMSM数学模型、坐标变换、MPC控制器、SVPWM调制等模块,实现了对电机定子电流的高精度跟踪控制,具备快速动态响应和低稳态误差的特点。文中提供了完整的仿真建模步骤、关键参数设置、核心MATLAB函数代码及仿真结果分析,涵盖转速、电流、转矩和三相电流波形,验证了MPC控制策略在动态性能、稳态精度和抗负载扰动方面的优越性,并提出了参数自整定、加权代价函数、模型预测转矩控制和弱磁扩速等优化方向。; 适合人群:自动化、电气工程及其相关专业本科生、研究生,以及从事电机控制算法研究与仿真的工程技术人员;具备一定的电机原理、自动控制理论和Simulink仿真基础者更佳; 使用场景及目标:①用于永磁同步电机模型预测控制的教学演示、课程设计或毕业设计项目;②作为电机先进控制算法(如MPC、MPTC)的仿真验证平台;③支撑科研中对控制性能优化(如动态响应、抗干扰能力)的研究需求; 阅读建议:建议读者结合Simulink环境动手搭建模型,深入理解各模块间的信号流向与控制逻辑,重点掌握预测模型构建、代价函数设计与开关状态选择机制,并可通过修改电机参数或控制策略进行拓展实验,以增强实践与创新能力。
根据原作 https://pan.quark.cn/s/23d6270309e5 的源码改编 湖北省黄石市2021年中考数学试卷所包含的知识点广泛涉及了中学数学的基础领域,涵盖了实数、科学记数法、分式方程、几何体的三视图、立体几何、概率统计以及代数方程等多个方面。 接下来将对每道试题所关联的知识点进行深入剖析:1. 实数与倒数的定义:该题目旨在检验学生对倒数概念的掌握程度,即一个数a的倒数表达为1/a,因此-7的倒数可表示为-1/7。 2. 科学记数法的运用:科学记数法是一种表示极大或极小数字的方法,其形式为a×10^n,其中1≤|a|<10,n为整数。 此题要求学生运用科学记数法表示一个天文单位的距离,将1.4960亿千米转换为1.4960×10^8千米。 3. 分式方程的求解方法:考察学生解决包含分母的方程的能力,题目要求找出满足方程3/(2x-1)=1的x值,需通过消除分母的方式转化为整式方程进行解答。 4. 三视图的辨认:该题目测试学生对于几何体三视图(主视图、左视图、俯视图)的认识,需要识别出具有两个相同视图而另一个不同的几何体。 5. 立体几何与表面积的计算:题目要求学生计算由直角三角形旋转形成的圆锥的表面积,要求学生对圆锥的底面积和侧面积公式有所了解并加以运用。 6. 统计学的基础概念:题目涉及众数、平均数、极差和中位数的定义,要求学生根据提供的数据信息选择恰当的统计量。 7. 方程的整数解求解:考察学生在实际问题中进行数学建模的能力,通过建立方程来计算在特定条件下帐篷的搭建方案数量。 8. 三角学的实际应用:题目通过在直角三角形中运用三角函数来求解特定线段的长度。 利用正弦定理求解AD的长度是解答该问题的关键。 9. 几何变换的应用:题目要求学生运用三角板的旋转来求解特定点的...
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值