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" 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类。在\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)包括方法:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYnV5aW5nZmVpODg4OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
上面数据传递关系:
控制器和视图关系:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYnV5aW5nZmVpODg4OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
视图和模型关系:
视图和显示效果:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYnV5aW5nZmVpODg4OA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
简单过程就这样啦!
YII数据流程浅析的更多相关文章
- PHP容器--Pimple运行流程浅析
需要具备的知识点 闭包 闭包和匿名函数在PHP5.3.0中引入的. 闭包是指:创建时封装周围状态的函数.即使闭包所处的环境不存在了,闭包中封装的状态依然存在. 理论上,闭包和匿名函数是不同的概念.但是 ...
- Android 4.4 Kitkat Phone工作流程浅析(八)__Phone状态分析
本文来自http://blog.csdn.net/yihongyuelan 转载请务必注明出处 本文代码以MTK平台Android 4.4为分析对象.与Google原生AOSP有些许差异.请读者知悉. ...
- yii执行流程
yii执行流程 原文:http://www.cnblogs.com/bluecobra/archive/2011/11/30/2269207.html 一 目录文件 |-framework 框 ...
- 以太网驱动的流程浅析(一)-Ifconfig主要流程【原创】
以太网驱动的流程浅析(一)-Ifconfig主要流程 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及<Lin ...
- 以太网驱动的流程浅析(三)-ifconfig的-19错误最底层分析【原创】
以太网驱动流程浅析(三)-ifconfig的-19错误最底层分析 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及& ...
- 以太网驱动的流程浅析(四)-以太网驱动probe流程【原创】
以太网驱动的流程浅析(四)-以太网驱动probe流程 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及<Lin ...
- 以太网驱动的流程浅析(五)-mii_bus初始化以及phy id的获取【原创】
以太网驱动的流程浅析(五)-mii_bus初始化以及phy id的获取 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号 ...
- 以太网驱动的流程浅析(二)-Ifconfig的详细代码流程【原创】
以太网驱动流程浅析(二)-ifconfig的详细代码流程 Author:张昺华 Email:920052390@qq.com Time:2019年3月23日星期六 此文也在我的个人公众号以及<L ...
- 玩转Windows服务系列——服务运行、停止流程浅析
通过研究Windows服务注册卸载的原理,感觉它并没有什么特别复杂的东西,Windows服务正在一步步退去它那神秘的面纱,至于是不是美女,大家可要睁大眼睛看清楚了. 接下来研究一下Windows服务的 ...
随机推荐
- CentOS 7 配置本地yum 源
1. 加载 CentOS的ISO镜像并挂载: [root@localhost files]# mount /media/files/CentOS-7-x86_64-DVD-1611.iso /mnt/ ...
- wifi钓鱼之--Pumpkin
无线钓鱼 前言:请准备一块rt3070的外接网卡 Pumpkin是一款无线安全检测工具WiFi-Pumpkin的使用,利用该工具可以伪造接入点完成中间人攻击,同时也支持一些其它的无线渗透功能.旨在 ...
- 签名mobileconfig 重签ipa
.mobileconfig文件的签名 生成Apache专用的三个证书 双击[2331135_zgp.ink_chain.crt]可以看到它是个根证书,在mac上,双击它,导入到证书中心,然后再导出为p ...
- python根据日期返回星期
import time #定义:timedate为时间戳def formattime(timedate,s="%Y-%m-%d %H:%M:%S"): return ...
- mysql 优化策略
from:https://dbaplus.cn/news-155-1531-1.html MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服 ...
- Q币直充-迅银渠道商(php 面向对象类)
Q币直充的一个类实现 1 <?php /** * DEC : 迅银Q币直充 * User: David Wang * Time: 2018/5/24 下午1:09 */ namespace go ...
- 用SQLyog或Navicat远程连接数据库
以SQLyog为例(Navicat同理): 登录远程数据库服务器查看当前存在用户:即点击用户管理器(人像图标),查看用户. 1)如果某一用户 主机一栏中是"%",则表示本用户是开放 ...
- PHPExcel读取表格内容
PHPExcel读取表格 先引入类IOFactory.php require_once '../PHPExcel/IOFactory.php'; $filePath = "test.xlsx ...
- python3 监控代码变化 自动重启 提高开发效率
#!/usr/bin/env python3 # -*- coding: utf-8 -*- __author__ = 'Michael Liao' import os, sys, time, sub ...
- build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing
maven test项目时遇到一下错误 Some problems were encountered while building the effective model for cn.temptat ...