- 浏览: 594794 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (332)
- PHP (92)
- JS/Css (38)
- Mysql (12)
- apache (7)
- magento (22)
- 杂淡 (1)
- snoopy (2)
- 安全 (1)
- YII (33)
- 网络编程 (3)
- HTML (4)
- editplus (1)
- phpcms (1)
- 软件 (1)
- kindeditor (2)
- android (35)
- java (1)
- Zend (21)
- Git (4)
- smarty (1)
- shell (0)
- svn (7)
- linux (1)
- 支付宝 (1)
- jquery (5)
- 微信 (3)
- thinkPHP (9)
- sqlyog (1)
- TCP/IP学习 (1)
- 服务器 (1)
- phpExcel (2)
- sql server (1)
- 我的工作 (0)
- 销售 (1)
- HTML5 (1)
- 接口开发 (0)
- memcache (2)
- jquery-weui (1)
- laravel (4)
最新评论
-
天使建站:
http://www.aijquery.cn/Html/bia ...
jquery searchableselect用法 -
天使建站:
http://www.aijquery.cn/Html/bia ...
jquery searchableselect用法 -
hudeyong926:
这技术太老了
PHP生成桌面快捷方式 -
hnlixf:
参考 http://www.jb51.net/article/ ...
ThinkPHP 3.3.2使用PHPExcel实现Excel数据导入导出完整实例 -
hudeyong926:
magento,清空购物车中所有的产品和session
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)); ?>
二、暴力跳转模式
$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
From:http://zccst.iteye.com/blog/1343613
发表评论
-
PHP flock文件锁定详细说明
2020-02-04 12:44 0参考资料 https://blog.csdn.net ... -
composer install,require,install归纳总结
2019-11-25 11:22 660require中引用的包,在线上线下的项目中都会使用,re ... -
电商系列---mysql高并发超库存卖问题
2018-01-22 16:04 1446参考http://blog.csdn.net/wula ... -
如何判断微信内置浏览器 MicroMessenger
2018-01-13 19:02 1829function is_weixin(){ v ... -
PHP中截取UTF-8中文字符串
2017-12-08 11:08 526/** * * @todo 截取中文字符串不 ... -
php使用file_get_contents()时出现错误Unable to find the wrapper “https” – did
2017-02-27 15:36 1622file_get_contents()获取https ... -
PHP中imagecopyresampled参数详解
2016-12-16 17:53 511bool imagecopyresampled ( reso ... -
获取当前页面完整URL地址
2016-12-08 15:43 736function get_url() { ... -
PHP安装Zend Guard Loader
2016-10-10 13:37 1281很简单,二步搞定。 1,下载 zend guard lo ... -
PHP生成桌面快捷方式
2016-09-08 10:24 6591, <a href="shortcut. ... -
php读取并保存base64编码的图片
2016-06-08 16:05 1843<?php header('Content-type ... -
PHP概率算法实例
2016-05-17 14:55 599<?php class Choujian ... -
php curl 伪造IP来源referer来源的实例代码
2016-05-17 11:29 1494curl发出请求的文件fake_ip.php ... -
php之curl实现http与https请求的方法
2016-05-17 11:15 1267常规curl请求: $url = 'http://www. ... -
PHP文件file缓存实现方式
2016-05-16 14:52 464<?php $cachFile = './index ... -
PHP并发访问实例代码
2016-05-16 11:47 424<?php $start=$_GET['s ... -
curl_init()和curl_multi_init()多线程的速度比较
2016-05-16 11:43 846php中curl_init()的作用很 ... -
PHP中使用cURL实现Get和Post请求的方法
2016-05-16 11:36 3761.cURL介绍 cURL 是一个利用URL语法规定 ... -
php apache 使用cors实现跨域
2016-05-04 10:23 3862apaceh 配置: <VirtualHost * ... -
php,phpQuery轻松采集网页内容
2016-04-22 18:01 761phpQuery是一个基于PHP的服务端开源项目,它可以让PH ...
相关推荐
- **路由和控制器**:定义URL到处理程序的映射,控制器处理请求并返回响应。 - **视图**:负责渲染数据。 - **身份验证和授权**:提供多种安全机制,如登录、权限控制、CSRF防护。 - **缓存**:支持多种缓存策略,如...
在这个商城项目中,模型层负责业务逻辑和数据处理,视图层负责页面展示,控制器层协调模型和视图,接收用户请求并转发给相应的模型进行处理,最后将结果返回给视图渲染输出。 此外,Yii的Gii工具是快速开发的利器,...
在Yii框架中,级联下拉菜单是一种常见的前端交互方式,它允许用户在选择一个选项后,根据所选选项动态更新另一个下拉菜单的内容。这种功能在处理有层级关系的数据时非常有用,例如省份和城市的选择。下面我们将详细...
如示例中的调用方法所示,可以通过如下方式调用网站标题: ```php <title><?=Yii::$app->params['title']; ?> ``` 这表示在视图层中直接访问params.php中定义的参数值。 另外,params.php也可以用于URL的拼凑。在...
- **路由与控制器**:定义URL路由,通过控制器处理HTTP请求并调用相关方法,返回视图或JSON响应。 3. **用户认证与权限管理**: - **登录注册**:用户通过输入用户名和密码完成登录,通常会涉及到密码加密存储...
实现这个功能的关键在于理解如何在模型层处理数据操作,并在控制器层和视图层之间协调这些操作。在实际应用中,为了确保用户体验,你可能还需要添加更多的错误处理和前端反馈机制。 Yii 提供了强大的 ORM(对象关系...
3. **控制器**:处理具体业务逻辑,接收并处理前端请求,调用模型层执行数据操作,并返回响应结果。 4. **视图文件**:负责展示数据,通常使用PHP模板引擎或直接使用PHP编写,与控制器交互,生成HTML输出。 5. **...
该系统采用经典的三层架构设计,包括表现层(视图)、业务逻辑层(控制器)和数据访问层(模型)。这种架构使得代码结构清晰,易于维护和扩展。 1. **表现层**:主要负责用户界面的展示,通过HTML、CSS和JavaScript...
6. **模型**:模型层处理与数据相关的业务逻辑,如添加、修改、删除新闻记录。 7. **视图**:视图负责显示数据,通常是HTML模板,可以包含PHP代码来动态生成内容。 8. **框架或架构**:如果源码是基于某种PHP框架...
13. **PHP与Web框架**:如Laravel、Symfony、Yii等,它们提供了更高效、规范的开发方式,简化了复杂项目管理。 14. **PHP与前端技术结合**:例如,通过AJAX实现页面异步更新,配合jQuery等JavaScript库提升用户体验...
- Controller:控制器层,作为模型和视图之间的桥梁,处理用户请求,调用模型并更新视图。 3. **构建PHP 7 MVC框架的步骤** - 初始化项目结构:创建核心目录如`app`(包含`Models`, `Controllers`, `Views`),`...
12. **PHP扩展**:PHP的扩展库丰富,如GD用于图像处理,cURL用于HTTP请求,Memcached或Redis用于缓存,以及各种用于特定任务的第三方扩展。 13. **OOP编程**:面向对象编程在PHP中被广泛使用,包括类、对象、继承、...
1. **源代码文件**:主要以.php为扩展名的文件,这些是系统的业务逻辑和控制层,处理用户请求并返回响应。 2. **数据库文件**:可能包括.sql文件,用于初始化数据库结构和填充数据。 3. **配置文件**:如config.php...