- 浏览: 3315819 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (567)
- Web前端-html/表单 (19)
- Web前端-CSS (24)
- Web前端-CSS框架 (4)
- Web前端-JS语言核心 (50)
- Web前端-JS客户端 (26)
- nodejs生态+grunt (10)
- seajs和requirejs (9)
- backbone等框架 (7)
- 模板基础 (7)
- Web前端-deps(不改动) (6)
- Web前端-component (10)
- Web前端-jquery-plugin (13)
- 浏览器兼容性 (6)
- Web前端-使用jQuery (25)
- Web前端-使用jqueryui (6)
- Web前端-性能优化 (3)
- Web协议-HTTP (6)
- ExtJS (13)
- PHP (22)
- PHP面向对象 (4)
- PHP扩展-SOAP (6)
- PHP扩展-curl (4)
- PHP与HTML(导出) (5)
- PHP扩展-综合 (7)
- mysql基础应用 (18)
- 技术心情 (18)
- 算法和面试题 (17)
- 工具(开发)使用 (36)
- memcached原理 (2)
- session和cookie (4)
- UML (2)
- Web前端_FusionCharts (5)
- Web前端_Flex (4)
- Web前端_JSP (3)
- JavaSE (10)
- JavaEE (4)
- tomcat (2)
- Servlet开发 (3)
- Spring开发 (1)
- REST相关 (2)
- 大访问量、高并发 (2)
- 网络编程 (1)
- YII (21)
- linux命令和内核 (12)
- yii与数据库 (10)
- yii与表单 (12)
- yii view层 (1)
- perl (7)
- yii扩展 (7)
- shell (4)
- photoshop (7)
- 视觉设计 (2)
- 我关注的名人在路上 (4)
- 1-自学能力 (1)
- 2-人际沟通能力 (3)
- 3-职业规划能力 (7)
- 4-项目管理能力 (2)
- python (3)
- django (4)
- Mysql高级应用 (6)
- prototype.js (4)
- Web系统安全 (1)
- Web前端-mobile (2)
- egret (6)
- jQuery源码分析 (5)
- fis (4)
最新评论
-
yzq21056563:
感谢作者分享~请教下,http://www.lisa33xia ...
CSS基础:text-overflow:ellipsis溢出文本 -
u012206458:
$.ajax的error,complete,success方法 -
DEMONU:
谢谢,虽然不能给你赞助,但是要给你顶
mysql中key 、primary key 、unique key 与index区别 -
njupt_tolmes:
阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿凡达阿滕庆亚 ...
CSS基础:text-overflow:ellipsis溢出文本 -
zenmshuo:
用过SpreadJS,也包含数据可视化的图表
推荐几个web中常用js图表插件
Yii控制层处理结果返回前端的三种方式
作者:zccst
批注: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
如果您觉得本文的内容对您的学习有所帮助,您可以微信:
作者:zccst
批注: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隐藏index.php文件的步骤
2014-06-14 14:03 12033作者:zccst 1.修改Apache的配置httpd.co ... -
YII异常处理actionError
2014-06-14 08:47 1975zccst转 错误处理目录 1,引发异常 2,显示错误 3, ... -
YII之 redirect 与contoller之间的方法调用
2014-05-31 18:44 11280作者:zccst 一个contoller里怎么调用另一个co ... -
yii中设置默认时区和语言
2013-04-24 16:28 3520作者:zccst 把php从5.2升级到5.4后,发现5. ... -
Yii异常解决办法
2013-04-23 17:15 1181作者:zccst 在Yii的项目中有一个../protect ... -
Yii之HttpRequest相关
2012-08-16 18:35 5114作者:zccst yii中的HttpRequest很像Jav ... -
yii之Log(日志)使用
2012-06-07 19:17 24937作者:zccst Yii 提供了 ... -
Yii之urlManager相关
2012-03-31 13:04 7107作者:zccst 首先urlManager是CUrlMan ... -
yii框架的执行过程
2012-03-11 14:09 3768作者:zccst 二、controllers里的$this ... -
Yii中引入module
2012-03-11 14:06 4968作者:zccst 一、controller与layout/ ... -
Yii->user(当前用户)相关
2012-03-02 17:50 21705作者:zccst 常用的用法是 class Contro ... -
如何在纯js文件中设置yii方式的url地址
2012-02-20 20:56 3329作者:zccst 1,在siteController.ph ... -
Yii使用filter进行访问控制
2012-02-16 19:23 15010Yii使用filter进行访问控制 作者:zccst 在Co ... -
Yii之widget专题
2012-01-12 16:14 11549作者:zccst 关于widgets ... -
Yii中使用session防止重复提交
2012-01-09 12:13 3207表单提交时,由于网速等原因,会出现重复提交的现象。 一、从前 ... -
yii中引入js和css文件
2011-12-29 20:10 35666作者:zccst 四、在视图层(../views/..)添加 ... -
Yii设置分页
2011-12-11 16:41 46181,在../models/NewDemand.php中定义pa ... -
在yii中使用session和cookie
2011-12-08 09:41 17317作者:zccst 2014-6-10 yii 操作sess ... -
Yii中引入php文件及插件
2011-11-03 14:32 24574作者:zccst 一、设置环境变量(在PHP) echo g ... -
YII初步
2011-06-03 22:19 2402安装过程,文档里有。 一、搭建Yii环境可能遇到的问题 1, ...
相关推荐
1. **模型(Model)**:在 Yii 中,数据模型是 MVC(模型-视图-控制器)架构的一部分,负责处理业务逻辑和数据操作。在这个场景中,可能需要创建一个或多个模型类来存储省市区的数据,如 `Province`, `City`, `...
- **路由和控制器**:定义URL到处理程序的映射,控制器处理请求并返回响应。 - **视图**:负责渲染数据。 - **身份验证和授权**:提供多种安全机制,如登录、权限控制、CSRF防护。 - **缓存**:支持多种缓存策略,如...
集成控制器
视图在Yii中通过CView类实现,它负责渲染模板并输出结果。Yii支持视图助手(Helper),如CHtml,提供了许多方便的HTML生成方法。同时,Yii的布局功能使得页面的头部、底部等公共部分可以被有效地重用。 控制器(C...
1. MVC(模型-视图-控制器)架构模式:Yii 遵循 MVC 设计模式,将应用程序逻辑分为三个主要部分:模型(处理数据和业务逻辑),视图(负责展示数据),以及控制器(协调模型和视图)。这种分离有助于代码组织和可...
4. **后端处理**:在Yii2的控制器中接收前端发送的数据,根据这些信息裁剪原始图片,并保存裁剪后的图片到服务器上。Yii2提供了方便的文件操作API,可以轻松地完成这项任务。 5. **集成**:通过Composer安装并配置...
在这个商城项目中,模型层负责业务逻辑和数据处理,视图层负责页面展示,控制器层协调模型和视图,接收用户请求并转发给相应的模型进行处理,最后将结果返回给视图渲染输出。 此外,Yii的Gii工具是快速开发的利器,...
7. **视图渲染:** 控制器操作完成后,视图层负责展示结果。 8. **事件触发:** 在特定的时间点触发事件,如控制器操作前后。 9. **响应发送:** 最终的响应被发送给用户浏览器,完成整个请求处理流程。 #### 四、...
Active Record则简化了数据库操作,允许开发者通过面向对象的方式来处理数据。 在“yii-1.1.8.r3324.tar.gz”文件中,包含的是Yii框架的1.1.8版本源码,这是一个相对稳定的版本。解压后,开发者可以查看源代码,...
9. **前端资源管理**:Yii提供了Asset Manager来管理CSS、JavaScript等前端资源,确保它们正确地被引用和压缩,提高页面加载速度。 10. **单元测试与代码质量**:Yii支持 PHPUnit 进行单元测试,确保代码的质量和...
Yii 2.0 提供了统一的错误处理和日志记录机制,帮助开发者调试和优化应用,同时提供了一套优雅的方式显示错误信息。 十一、部署与性能优化 手册还会介绍如何将开发完成的应用部署到生产环境,以及如何进行性能优化...
5. **vendor**:Composer依赖管理器自动下载的第三方库和Yii框架本身都存放在这里。 6. **runtime**:运行时目录,框架在此生成临时文件,如日志、缓存等。 7. **web**:Web应用的入口点,包含`index.php`,它是Web...
将Yii2与Swoole结合,可以极大地提升Yii2应用的性能,特别是对于处理高并发、低延迟的场景,如实时聊天、游戏服务器、API接口等。 标题"yii2swoole让yii2运行在swoole上"指出的核心知识点是: 1. **Yii2框架与...
Yii 2.0.9 advanced模板提供了预配置的前端和后端应用结构,每个应用都有自己的独立入口文件、模型、视图和控制器,这有助于开发者专注于各自的应用逻辑,而不是基础架构。 此外,Yii 2.0.9 还支持MVC(Model-View-...
1. MVC架构:Yii2遵循模型-视图-控制器(MVC)设计模式,它有助于分离应用程序逻辑、用户界面和控制层。这种分离确保了代码的可维护性和可重用性。 2. 活跃记录(Active Record):Yii2的活跃记录模式允许开发者用...
"yii2 通用后台系统"是一个基于Yii2框架构建的企业级后台管理系统,旨在提供一套全面、高效的后台管理解决方案,包括用户管理、权限控制、数据统计等功能,帮助开发者快速搭建稳定且功能丰富的后台应用。 在Yii2...
在Yii框架中,`render` 和 `renderPartial` 是两个非常关键的方法,它们用于视图渲染,帮助开发者构建动态Web应用程序。理解它们的区别是优化页面性能和管理客户端脚本的关键。 1. `render` `render` 方法主要用于...
3. Controller:控制器处理用户请求,调用模型进行业务处理,并将结果传递给视图进行展示。 四、路由与控制器 Yii的路由系统灵活,允许你自定义URL格式。通过控制器,你可以定义不同的操作(actions),处理不同的...
2. **数据库支持**:Yii 提供了 DAO 和 ActiveRecord 两种方式来操作数据库。DAO 提供底层 SQL 查询接口,而 ActiveRecord 是一种对象关系映射(ORM),使得数据库操作更加面向对象。 3. **性能优化**:Yii 内置了...