`
dcj3sjt126com
  • 浏览: 1872183 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

YII学习第九天,控制层处理结果返回前端的三种方式

    博客分类:
  • YII
yii 
阅读更多

Yii控制层处理结果返回前端的三种方式 

批注:render会渲染layout,而renderPartial不会渲染。 

一、渲染方式 

1,局部渲染renderPartial 
public function renderPartial($view,$data=null,$return=false,$processOutput=false) 

   
   if(($viewFile=$this->getViewFile($view))!==false) 
   { 
    $output=$this->renderFile($viewFile,$data,true);//getViewFile($view)获得$view的完整路径 
    if($processOutput) 
     $output=$this->processOutput($output);  // processOutput()作用,比如在head加上css或js脚本等 
    if($return) 
     return $output; 
    else 
     echo $output; 
   } 
   else 
    throw new CException(Yii::t('yii','{controller} cannot find the requested view "{view}".', 
     array('{controller}'=>get_class($this), '{view}'=>$view))); 



注解: 
(1)getViewFile($view)获得$view的完整路径 
(2)如果没有在$config里配置第三方的renderer,renderFile() 里实际是调用了yii自身提供的renderInternal()来render view文件: 

public function renderFile($viewFile,$data=null,$return=false) 

   $widgetCount=count($this->_widgetStack); 
   // 如果配置了其他的ViewRenderer 
   if(($renderer=Yii::app()->getViewRenderer())!==null) 
    $content=$renderer->renderFile($this,$viewFile,$data,$return); 
   else 
    // yii 自身的render 
    $content=$this->renderInternal($viewFile,$data,$return); 
   if(count($this->_widgetStack)===$widgetCount) 
    return $content; 
   else 
   { 
    $widget=end($this->_widgetStack); 
    throw new CException(Yii::t('yii','{controller} contains improperly nested widget tags in its view "{view}". A {widget} widget 

does not have an endWidget() call.', 
     array('{controller}'=>get_class($this), '{view}'=>$viewFile, '{widget}'=>get_class($widget)))); 
   } 



Yii的renderer用的是php本身作为模板系统: 

public function renderInternal($_viewFile_,$_data_=null,$_return_=false) 

   // extract函数将$_data_从数组中将变量导入到当前的符号表 
   if(is_array($_data_)) 
    extract($_data_,EXTR_PREFIX_SAME,'data'); 
   else 
    $data=$_data_; 
   if($_return_) 
   { 
    ob_start(); 
    ob_implicit_flush(false); 
    require($_viewFile_); 
    return ob_get_clean(); 
   } 
   else 
    require($_viewFile_); 




2,全局渲染render 
render()的实际上是先renderPartial view文件,然后renderFile layoutfile,并将view文件的结果做为$content变量传入。 
public function render($view,$data=null,$return=false) 

   $output=$this->renderPartial($view,$data,true); 
   if(($layoutFile=$this->getLayoutFile($this->layout))!==false) 
    $output=$this->renderFile($layoutFile,array('content'=>$output),true); 

   $output=$this->processOutput($output); 

   if($return) 
    return $output; 
   else 
    echo $output; 


processOutput将render的结果再做处理,比如在head加上css或js脚本等。 
public function processOutput ($output) 

   Yii::app()->getClientScript()->render($output); 

   // if using page caching, we should delay dynamic output replacement 
   if($this->_dynamicOutput!==null && $this->isCachingStackEmpty()) 
    $output=$this->processDynamicOutput($output); 

   if($this->_pageStates===null) 
    $this->_pageStates=$this->loadPageStates(); 
   if(!empty($this->_pageStates)) 
    $this->savePageStates($this->_pageStates,$output); 

   return $output; 



区别: 
render会把需要的js,css等嵌入 
renderPartial可以通过把最后一个参数设置成true完成一样的功能 $this->renderPartial('partial_view', $params, false, true); 

实例: 
在../controllers/XXController.php中 
$this->render('update',array('model'=>$model)); 
在../views/ControllerID/update.php中 
<?php echo $this->renderPartial('_form', array('model'=>$model)); ?> 


二、暴力跳转模式——适合form表单提交 

$this->redirect(array('view','id'=>$model->id)); 


三、返回值方式——适合异步调用 
//写法1: 
public function response($data, $type="application/json"){ 
    print json_encode($data); 
    Yii::app()->end(); 


//写法2: 
$this->layout = false; 
header('Content-type: application/json'); 
echo json_encode($arr); 
Yii::app()->end();  //执行该行,已经将layout设为了false 

分享到:
评论

相关推荐

    Yii 1.1 Application Development Cookbook

    - **控制器**:作为 MVC 架构中的控制层,负责处理用户请求并调用模型和视图。 - **模型**:用于处理业务逻辑和数据操作,包括数据验证、CRUD 操作等。 - **视图**:呈现数据给用户的界面层,可以使用布局、小部件等...

    yii-advanced-app-2.0.35.tgz

    6. `vendor/`:这里是Composer管理的第三方依赖库的存放位置,包括Yii框架本身和其他依赖的PHP库。 7. `.gitignore` 和 `composer.json`:`.gitignore` 文件定义了在版本控制中应忽略的文件和目录,而`composer....

    Yii_Cookbook

    - **实现方式**:使用第三方库如OAuth2进行身份验证和数据交互。 ##### 18. 创建面包屑导航组件 - **知识点**:开发自定义的面包屑导航组件。 - **实现方式**:设计一个可以自动根据当前URL生成面包屑链接的组件...

    yiiquiz:demo yii quiz

    7. **vendor**:第三方库和 Composer 依赖的存放位置。 8. **composer.json**:项目依赖管理文件,定义项目需要的库及其版本。 9. **index.php**:Web 应用的入口文件,处理请求并加载框架。 10. **init**:Yii 的...

    yii2test

    Yii2 的核心特性包括 MVC(模型-视图-控制器)架构、数据库抽象层、缓存管理、安全功能、表单处理以及丰富的扩展库。这些特性使得开发者能够快速、高效地构建复杂的应用程序。 在“yii2test-master”这个项目中,...

    blogdemo2-1.13.zip

    此外,还有`common`目录存放公共的模型、行为、配置等,`console`用于命令行脚本,`vendor`存放第三方库,`config`存储全局配置,`runtime`则保存运行时生成的文件。 2. **Yii 2.0核心组件**:Yii框架的核心组件...

    后台管理系统

    3. **控制器**:处理具体业务逻辑,接收并处理前端请求,调用模型层执行数据操作,并返回响应结果。 4. **视图文件**:负责展示数据,通常使用PHP模板引擎或直接使用PHP编写,与控制器交互,生成HTML输出。 5. **...

    基于PHP的蓝点市场BpiMarket源码.zip

    9. **vendor**:如果使用Composer管理依赖,这里会包含第三方库。 10. **logs**:日志文件,记录系统运行情况和错误信息。 11. **scripts**:可能包含自动化脚本,如部署或测试脚本。 深入研究这个源码,开发者可以...

    基于php的房产公司网站的设计与实现.zip

    OAuth2或JWT(JSON Web Tokens)可能用于实现第三方登录和权限控制。 9. 安全性:考虑到涉及到用户隐私和交易,网站需要考虑防止SQL注入、XSS攻击等网络安全问题,通过参数化查询、输入验证、安全编码等措施提高...

    基于PHP的兴趣分享图谱程序带淘宝客源码.zip

    这个程序的开发涉及多个层次的技术,从后端的服务器处理到前端的用户体验,再到与第三方平台的集成,都是开发者需要掌握的重要技能。通过深入研究这个源码,开发者可以学习到如何构建类似的社交网络应用,并了解如何...

    基于PHP的MMT企业管理系统php版源码.zip

    8. **公共文件**:如CSS和JavaScript文件,用于前端表现层。 9. **日志文件**和**错误报告**:帮助调试和优化系统。 10. **许可证文件**和**README**:提供关于软件的许可信息和使用指南。 开发这样一个系统通常...

    PHP订单系统

    3. `controllers`:控制层文件,处理HTTP请求,调用模型处理业务逻辑。 4. `models`:模型层文件,负责与数据库交互,处理数据。 5. `views`:视图层文件,包含订单页面的HTML模板。 6. `public`:静态资源文件夹,...

    PHP实例开发源码—军锋真人CS野战php在线预订系统.zip

    6. **支付集成**:项目可能集成了第三方支付接口,如支付宝、微信支付,通过API调用来处理在线支付过程,确保交易安全和顺利完成。 7. **错误处理与日志记录**:为了调试和监控系统运行情况,项目可能会有完善的...

    基于PHP的云站宝企业建站程序 简体中文 UTF-8.zip

    8. **第三方API集成**:如支付接口、社交媒体分享等,增强网站功能。 9. **SEO优化**:如元标签管理、URL重写,提高网站在搜索引擎中的可见性。 10. **前端资源**:包括HTML、CSS、JavaScript文件,以及可能的前端...

    基于php营销型油烟空气净化器商用电磁炉电器网站.zip

    7. **支付集成**:营销型网站可能集成了第三方支付接口,如支付宝、微信支付,实现在线购买功能。 8. **SEO优化**:为了提升搜索引擎排名,网站可能进行了关键词优化、元标签设置、URL结构规划等SEO策略。 9. **...

    sim-kk:是的 kk

    4. `vendor/`:Composer管理的第三方依赖库。 5. `angular/`:AngularJS的源码或编译后的文件,可能包括模块、服务、指令等。 6. `.git/`:Git版本控制的元数据。 7. `README.md`:项目介绍和使用指南。 8. `...

    shopmvc10:我的下一家商店

    3. **Controller**: 控制器是模型和视图之间的桥梁,接收用户的请求,调用相应的模型方法处理数据,然后将结果传递给视图进行展示。控制器可以处理复杂的逻辑,如验证用户输入、调用多个模型方法或决定显示哪个视图...

    PHP整站程序实例开发源码——数字中国全站系统.zip

    11. **第三方库和框架**:为提高开发效率,开发者可能会使用一些流行的PHP库或框架,如Laravel、Yii、ThinkPHP等。这些库和框架提供了丰富的功能,如路由、依赖注入、自动加载等。 12. **响应式设计**:随着移动...

    php-projects

    12. **PHP扩展**:PHP的扩展库丰富,如GD用于图像处理,cURL用于HTTP请求,Memcached或Redis用于缓存,以及各种用于特定任务的第三方扩展。 13. **OOP编程**:面向对象编程在PHP中被广泛使用,包括类、对象、继承、...

    风雨如磐的后端

    9. **模板引擎**:如Twig、Smarty等,允许将业务逻辑和视图层分离,提高代码可维护性。 10. **框架应用**:如Laravel、Symfony、Yii等PHP框架,提供了强大的工具和约定,加速Web应用的开发。 PHP的生态系统还包括...

Global site tag (gtag.js) - Google Analytics