首页 > 代码库 > YII简单MVC浅析(菜鸟总结)

YII简单MVC浅析(菜鸟总结)

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://www.mamicode.com/"http://img.blog.csdn.net/20141018110648181?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYnV5aW5nZmVpODg4OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

控制器代码部分解析:这个控制器写在houtai模块中,却可以调用前台模块中模型,可见代码有很高重用性。

<?php>
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简单MVC浅析(菜鸟总结)