zoukankan      html  css  js  c++  java
  • YII数据流程浅析

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

    数据库图:


    模型部分介绍:

    <?php
            /*
             * 前两个方法必须写
             * 继承自CActiveRecord类 这个类位于 frameworkdbarCActiveFinder.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" alt="" /></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类。在frameworkyiilite.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 类(frameworkwebwidgetsCActiveForm.php)包括方法:


    上面数据传递关系:

    控制器和视图关系:


    视图和模型关系:


    视图和显示效果:


    简单过程就这样啦!




  • 相关阅读:
    MySQL学习笔记
    FileInputStream
    Java 多个if 和多个else if 的区别
    Flume 聚合
    Flume SinkProcessor
    Flume ChannelSelector (包括自定义flume拦截器)
    Flume 案例演示
    為政第二
    各种版本 WordCount
    學而第一
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6895754.html
Copyright © 2011-2022 走看看