1. 程式人生 > >YII數據流程淺析

YII數據流程淺析

art model 原生 ews .net area 一個 控制器 href

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)包括方法:

技術分享

上面數據傳遞關系:

控制器和視圖關系:

技術分享

視圖和模型關系:

技術分享

視圖和顯示效果:

技術分享

簡單過程就這樣啦!




YII數據流程淺析