YII数据流程浅析

MVC就不解释,直接上代码分析数据流程:

数据库图:

模型部分介绍:

<?php
        /*
         * 前两个方法必须写
         * 继承自CActiveRecord类 这个类位于 \framework\db\ar\CActiveFinder.php 这个路径下
         * 它包括了经常使用查询方法
         */
	class Goods extends CActiveRecord{
		public static function model($classname = __CLASS__){
			//返回当前模型对象方法
			return parent::model($classname);
		}
		//返回数据表名称
		public function tableName(){
			return ‘{{goods}}‘;
		}
                //相应标签名字 对汉字名字进行统一管理
                function attributeLabels() {
                    //parent::attributeLabels();
                    return array(
                        ‘goods_name‘ => ‘商品名称:‘,
                        ‘goods_weight‘ => ‘商品重量‘,
                        ‘goods_price‘ => ‘商品价格‘,
                        ‘goods_category_id‘ => ‘商品分类‘,
                        ‘goods_brand_id‘ => ‘品牌‘,
                        ‘goods_introduce‘ => ‘简单介绍‘,
                        ‘goods_number‘ => ‘数量‘,
                    );
                }

	}
?>
</pre><p></p><p>CActiveRecord这个类下非常多操作数据库方法:</p><p><img src="http://img.blog.csdn.net/20141018110648181?

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYnV5aW5nZmVpODg4OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"  /></p><p></p><p>控制器代码部分解析:这个控制器写在houtai模块中,却能够调用前台模块中模型,可见代码有非常高重用性。

</p><p></p><pre name="code" class="php"><?php
	class GoodsController extends Controller{
		function actionShow(){
			$goods_model = Goods::model(); //简单查询能够通过模型里面静态方法来创建
			$sql = "select goods_name,goods_price,goods_create_time from {{goods}} limit 10";
                        $goods_infos = $goods_model ->findAllBySql($sql);//通过原生态sql进行查询,findALlBySql返回一个对象数组,
                        var_dump($goods_infos);
			foreach($goods_infos as $v){
				echo $v ->goods_name ."<br />";
			}
                        exit();
			$this->render(‘show‘,array("goods_infos"=>$goods_infos)); //这样的方式会渲染布局
                        //$this->renderPartial(‘add‘,array(‘goods_model‘ => $goods_model)); //这样的方式不会渲染布局
		}
}

findAllBySql($sql)数据分析:

通过这个URL訪问的部分views代码:

            <table class="table_a" border="1" width="100%">
                <tbody><tr style="font-weight: bold;">
                        <td>序号</td>
                        <td>商品名称</td>
                        <td>库存</td>
                        <td>价格</td>
                        <td>图片</td>
                        <td>缩略图</td>
                        <td>品牌</td>
                        <td>创建时间</td>
                        <td align="center">操作</td>
                    </tr>
                    <?php
                         $i=1;
                        foreach($goods_infos as $_v){
                    ?>
                    <tr id="product1">
                        <td><?php echo $i++;?

></td>
                        <td><a href="#">苹果(APPLE)iPhone 4S<?php echo $_v->goods_name;?></a></td>
                        <td><?php echo $_v->goods_number;?></td>
                        <td><?php echo $_v->goods_price ;?

></td>
                        <td><img src="<?PHP ECHO HOUTAI_IMG_URL ;?><?php  echo $_v->goods_big_img;?

>" height="60" width="60"></td>
                        <td><img src="<?PHP ECHO HOUTAI_IMG_URL ;?

><?php echo $_v->goods_small_img;?>" height="40" width="40"></td>
                        <td><?php echo $_v->goods_brand_id;?

></td>
                        <td><?php echo $_v->goods_create_time;?

></td>
                        <td><a href="./index.php?

r=houtai/goods/update">改动</a></td>
                        <td><a href="javascript:;" onclick="delete_product(1)">删除</a></td>
                    </tr>
                    <?php 

                        }
                    ?

>

                    <tr>
                        <td colspan="20" style="text-align: center;">
                            [1]
                        </td>
                    </tr>
                </tbody>
            </table>

数据传递关系:

通过widget小物件完毕表单注冊解析:

刚才那个控制器里面增加以下方法:

		function actionAdd(){
                    $goods_model = new Goods();
                    $this->renderPartial(‘add‘,array(‘goods_model‘ => $goods_model));
		}

模型还是刚才那个模型;

views:

<?php $form =  $this ->  beginWidget("CActiveForm");?

>
<!-- 调用了  CActiveForm 类
      如何查找CActiveForm类。在\framework\yiilite.php 里查找,这个文件10000多行,可见yii核心代码就是这么多行
      通过这个在找到 CActiveForm所在文件   CActiveForm.php包括了非常多方法。就是对表单元素操作
-->
            <table border="1" width="100%" class="table_a">
                <tr>
<!--                    <td>商品名称</td>-->
<!--                    <td><input type="text" name="f_goods_name" /></td>-->
                    <td><?

php echo $form->labelEx($goods_model,‘goods_name‘);?></td>
                    <td><?

php echo $form -> textField($goods_model,‘goods_name‘);?></td>
                </tr>
                 <tr>

                    <td><?

php echo $form->labelEx($goods_model,‘goods_weight‘);?></td>
                   <td> <?

php echo $form -> textField($goods_model,‘goods_weight‘);?

></td>
                </tr>
                 <tr>

                    <td><?php echo $form->labelEx($goods_model,‘goods_price‘);?></td>
                   <td> <?

php echo $form -> textField($goods_model,‘goods_price‘);?></td>
                </tr>
                <tr>

                    <td><?php echo $form->labelEx($goods_model,‘goods_number‘);?></td>
                   <td> <?

php echo $form -> textField($goods_model,‘goods_number‘);?

></td>
                </tr>
                <tr>

                    <td><?php echo $form->labelEx($goods_model,‘goods_category_id‘);?></td>
                   <td> <?php echo $form -> textField($goods_model,‘goods_category_id‘);?></td>
                </tr>
                 <tr>

                    <td><?php echo $form->labelEx($goods_model,‘goods_brand_id‘);?></td>
                    <td><?

php echo $form -> textField($goods_model,‘goods_brand_id‘);?></td>
                </tr>
                <tr>

                    <td><?php echo $form->labelEx($goods_model,‘goods_introduce‘);?></td>
                    <td><?php echo $form -> textArea($goods_model,‘goods_introduce‘,array(‘cols‘ => 20,"rows" => 5));?

></td>
                </tr>
            </table>
            <?

php $this->endWidget();?

>

能够看下CActiveForm 类(\framework\web\widgets\CActiveForm.php)包括方法:

上面数据传递关系:

控制器和视图关系:

视图和模型关系:

视图和显示效果:

简单过程就这样啦!

时间: 2024-10-13 10:40:19

YII数据流程浅析的相关文章

Android 4.4 Kitkat Phone工作流程浅析(十一)__PSensor工作流程浅析

本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉. 前置文章: <Android 4.4 Kitkat Phone工作流程浅析(一)__概要和学习计划> <Android 4.4 Kitkat Phone工作流程浅析(二)__UI结构分析> <Android 4.4 Kitkat Phone工作流程浅析(三)__MO(去电)流程分析> <Android 4.4 Kitkat Phone工作流程浅析(四)__RI

Android 4.4 Kitkat Phone工作流程浅析(八)__Phone状态分析

本文来自http://blog.csdn.net/yihongyuelan 转载请务必注明出处 本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉. 前置文章: <Android 4.4 Kitkat Phone工作流程浅析(一)__概要和学习计划> <Android 4.4 Kitkat Phone工作流程浅析(二)__UI结构分析> <Android 4.4 Kitkat Phone工作流程浅析(三)__MO(去电)流程

yii执行流程

yii执行流程 原文:http://www.cnblogs.com/bluecobra/archive/2011/11/30/2269207.html 一 目录文件 |-framework     框架核心库 |--base         底层类库文件夹,包含CApplication(应用类,负责全局的用户请求处理,它管理的应用组件集,将提供特定功能给整个应用程序),CComponent(组件类,该文件包含了基于组件和事件驱动编程的基础类,从版本1.1.0开始,一个行为的属性(或者它的公共成员

Android 4.4 Kitkat Phone工作流程浅析(九)__状态通知流程分析

本文来自http://blog.csdn.net/yihongyuelan 转载请务必注明出处 本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉. 前置文章: <Android 4.4 Kitkat Phone工作流程浅析(一)__概要和学习计划> <Android 4.4 Kitkat Phone工作流程浅析(二)__UI结构分析> <Android 4.4 Kitkat Phone工作流程浅析(三)__MO(去电)流程

Android 4.4 Kitkat Phone工作流程浅析(十二)__4.4小结与5.0概览

前置文章: <Android 4.4 Kitkat Phone工作流程浅析(一)__概要和学习计划> <Android 4.4 Kitkat Phone工作流程浅析(二)__UI结构分析> <Android 4.4 Kitkat Phone工作流程浅析(三)__MO(去电)流程分析> <Android 4.4 Kitkat Phone工作流程浅析(四)__RILJ工作流程简析> <Android 4.4 Kitkat Phone工作流程浅析(五)__M

【转】Android 4.4 Kitkat Phone 对比 5.0 Lollipop Phone工作流程浅析

概述 在Android 4.4 中,Google 对Telephony_Phone进行了重构,前面也通过一些列文章分析了Android 4.4 中Telephony Phone的工作流程.但在2014年10月15日,Google发布了Android 5.0 预览版,正式版也在一个月之后发布.Android 5.0 变化非常大,无论从UI风格还是功能实现上,Google都进行了大刀阔斧的修改.同时,Telephony_Phone模块的架构也再次进行了调整,调整之后的Telephony_Phone各

【转】Android中measure过程、WRAP_CONTENT详解以及xml布局文件解析流程浅析(下)

转载请注明出处:http://blog.csdn.net/qinjuning 上篇文章<<Android中measure过程.WRAP_CONTENT详解以及xml布局文件解析流程浅析(上)>>中,我们 了解了View树的转换过程以及如何设置View的LayoutParams的.本文继续沿着既定轨迹继续未完成的job. 主要知识点如下:                 1.MeasureSpc类说明                 2.measure过程详解(揭秘其细节);   

Android 4.4 Kitkat Phone工作流程浅析(十)__&quot;通话显示&quot;查询流程

本文来自http://blog.csdn.net/yihongyuelan 转载请务必注明出处 本文代码以MTK平台Android 4.4为分析对象,与Google原生AOSP有些许差异,请读者知悉. 前置文章: <Android 4.4 Kitkat Phone工作流程浅析(一)__概要和学习计划> <Android 4.4 Kitkat Phone工作流程浅析(二)__UI结构分析> <Android 4.4 Kitkat Phone工作流程浅析(三)__MO(去电)流程

OkHttp 流程浅析 - NoHarry的博客

简介 本文通过结合OkHttp源码,分析发送请求的大致流程. 本文源码基于3.12.0版本 示例 首先我们创建一个最简单的请求,以此为例开始进行分析 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 OkHttpClient client=new OkHttpClient.Builder().build(); //创建Request Request request=new Request .Builder()