MVC就不解釋,直接上代碼分析數據流程:
數據庫圖:
模型部分介紹:
<?php /* * 前兩個方法必須寫 * 繼承自CActiveRecord類 這個類位于 /framework/db/ar/CActiveFinder.php 這個路徑下 * 它包含了常用查詢方法 */ html' target='_blank'>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)); //這種方式不會渲染布局 }}
通過這個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)包含方法:
上面數據傳遞關系:
控制器和視圖關系:
視圖和模型關系:
視圖和顯示效果:
簡單過程就這樣啦!
PHP編程鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答