最为简易的yii 教程(一)
了解目录的框架结构 framework主要有
base 框架核心组件
caching 缓存组件
db 数据库组件
gii 代码自动生成组件
logging 日志组件
validators 表单验证组件
web 应用组件
创建的应用的文件夹下的目录 的主要结构:
components 应用组件
config 配置文件(数据库,缓存等等)
controllers 控制器mvc
models 模型MVC
views 视图MVC

现在我们开始实战了
目录protected/controllers有一个siteController.php的文件
我们访问路由lcoalhost/yii/cms/index.php?r=site/index 就是调用上面文件下的index的方法
其中的控制器对应的是与view下的文件夹应该同名 比如siteController.php对应的是views下的site文件夹
现在我们可以进行基本的操作了 但是现在的样式,js都没引进来
由于每一分文件都要有入口index.php进入 那么我们要做的是在入口文件下面引入一个常量的文件
// 引入定义好的常量require_once (dirname(__FILE__).'/protected/config/constant.php');
接下来要在对应项目的配置文件下建立一个常量文件
<?php/** * 设置系统常量 */define('SITE_URL', 'localhost/yii/cms');define('CSS_URL',"assets/default/css/"); //前台样式目录地址define('IMG_URL',"assets/default/img/"); //前台图片目录地址define('HOUTAI_CSS_URL',"assets/houtai/css/"); //后台样式目录地址define('HOUTAI_IMG_URL',"assets/houtai/img/"); //后台图片目录地址
现在我们的前端样式已经出来了
必须注意的是main.php是我们的主配置文件 在加载入口文件的时候已经加载进去
接下来我们要建立后台
1。打开主配置文件 main.php文件 找到gii 如果gii被注释了 那么就解除注释
2. 打开后台localhost/yii/cms/index.php?r=gii
密码为main中的密码
3.选择Module Generator建立一个新的模块 如houtai
此时模块已经创建成功了 ,但是没有和主配置文件取得关联
所以 我们要与配置文件取得关联
'modules'=>array( // uncomment the following to enable the Gii tool 'gii'=>array( 'class'=>'system.gii.GiiModule', 'password'=>'root', // If removed, Gii defaults to localhost only. Edit carefully to taste. 'ipFilters'=>array('127.0.0.1','::1'), ), // 引入后台模块 'houtai', ),
填入上面的引用
创建模型的方法与前台的方法一样
后台的路由地址localhost/yii/cms/index.php?r=模块/控制器/方法
前台的路由地址:localhost/yii/cms/index.php?r=控制器/方法
css,js配置见上文
注意:iframe中的应用问题:
target=”名字” //这个名字与frame里边的名字一致,那么链接内容会跑到这个frame里边。
即 iframe中的target名称必须与frameset中的frame name名称相同
下面我们来进行数据库的操作
1.建立数据库 如下
CREATE TABLE `sw_goods` ( `goods_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增id', `goods_name` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '商品名称', `goods_weight` int(11) NOT NULL DEFAULT '0' COMMENT '重量', `goods_price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '价格', `goods_number` int(11) NOT NULL DEFAULT '100' COMMENT '数量', `goods_category_id` int(11) NOT NULL DEFAULT '0' COMMENT '分类', `goods_brand_id` int(11) NOT NULL DEFAULT '0' COMMENT '品牌', `goods_introduce` text COLLATE utf8_unicode_ci COMMENT '详细介绍', `goods_big_img` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '商品图片', `goods_small_img` varchar(128) COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '商品小图', `goods_create_time` int(11) NOT NULL DEFAULT '0' COMMENT '添加时间', PRIMARY KEY (`goods_id`)) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='商品表';SET character_set_client = @saved_cs_client;
2.在控制器的任意位置输出var_dump(Yii:app()->db);
一个数据表中的字段对应的是一个模型
3.学习ar技术即(CActiveRecord.php)
地址:framework/views/CAtiveRecord.php
此时由于是操作数据库的,那么我们有必要打开调试日志
在主配置文件中找到 CWebLogRoute 进行解开注释
1.render 输出父模板的内容,将渲染的内容,嵌入父模板。|
2.renderPartial 则不输出父模板的内容。只对本次渲染的局部内容,进行输出。
4.显示页--show
// 产生模型model 对象
$goods_model=Goods::model();
// 通过具体sql语句获得商品信息
$sql="select goods_id,goods_name,goods_price,goods_create_time from {{goods}} limit 10";
$goods_infos=$goods_model->findAllBySql($sql);
//输出
$this->renderPartial('show',array('goods_infos'=>$goods_infos));
此时我们可以通过ar获取信息
ar:findallBysql();通过sql的形式查询信息
5.添加页--add
//实例化模型类(激活)
$goods_model=new Goods();
//判断Goods模型是否有传入,有的话遍历放入激活的类中,再进行保存
if(isset($_POST['Goods'])){
foreach ($_POST['Goods'] as $_k => $_v) {
$goods_model->$_k=$_v;
}
$goods_model->goods_create_time=time();
// 调用save()方法实现数据添加
if($goods_model->save())
// echo "success";
// 信息添加成功后实现页面重定向(商品列表页面)
$this->redirect("./index.php?r=houtai/goods/show");
}
$this->renderPartial('add',array('goods_model'=>$goods_model));
商品修改页
function actionUpdate(){
//我们具体修改哪个商品,需要将其信息查询出来
// 我们需要知道哪个商品被修改,把商品的id信息通过get方式传递过来
//接收被修改商品id信息
// $this->renderPartial('update');
}
下面我们来进行一个模拟数据添加的测试方法:
/*
*通过模型实现数据添加
*测试方法
*/
function actionJia(){
// 1.创建模型对象
$goods_model=new Goods();//我们需要添加数据,创建对象方式有别于查询
// 2。对象丰富属性 goods_name,goods_price,goods_weight等等
$goods_model->goods_name="Apple 5s";
$goods_model->goods_price=5199;
$goods_model->goods_weight=102;
// 3.调用save()方法实现数据添加
if($goods_model->save())
echo "success";
else
echo "fail";
}
对于一些常用的小组件,yii通过对其的封装 我们可以对其进行直接的调用
首先我们想要知道我们可以调用什么组件,我们可以在framework/widgets/views/下面对应组件
然后我们可以进入组件中。查看可以调用的方法 为了方便起见 我们可以用netbean来进行查看
如在houtai/views/good/add.php中有一下的例子
<?php $form=$this->beginWidget('CActiveForm') ?>
<table border="1" width="100%" class="table_a">
<tr>
<td>
<?php echo $form->labelEx($goods_model,'goods_name'); ?>
</td>
<td>
<!-- <input type="text" name="f_goods_name" /> -->
<?php echo $form->textField($goods_model,'goods_name'); ?>
</td>
</tr>
此时我们了解到方法中的$goods_model是控制器中的模版输出对象
而goods_name是我们在同一个项目的目录下protected/model/goods.php中的attributeLabels()方法对应
、
function attributeLabels(){
return array(
'goods_name'=>'商品名称',
'goods_weight'=>'商品重量',
'goods_price'=>'商品价格',
'goods_number'=>'商品数量',
'goods_category_id'=>'分类',
'goods_brand_id'=>'品牌',
'goods_introduce'=>'简介',
);
}
}
最为简易的yii 教程(一)的更多相关文章
- iRedMail邮件系统配置简易视频安装教程
iRedMail邮件系统配置简易视频安装教程 iRedMail邮件系统配置简易视频安装教程 iRedMail中文名为“艾瑞得邮件系统”, 属于开源的企业邮件解决方案,但其性能不逊于任何商 ...
- 【教程】简易CDQ分治教程&学习笔记
前言 辣鸡蒟蒻__stdcall终于会CDQ分治啦! CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. CDQ分治的基 ...
- HTC One M7简易刷Recovery教程
HTC One M7作为当下HTC旗下的旗舰热门机,用户们对于刷机的需求都比较强烈,对于刷ROM的前提就是要刷入Recovery,当然作为安卓智能手机HTC one而言也不例外,最近有些用 ...
- Django搭建简易博客教程(四)-Models
原文链接: http://www.jianshu.com/p/dbc4193b4f95 Django Model 每一个Django Model都继承自django.db.models.Model 在 ...
- Windows下将程序打包为安装包(最为简易的方式)
一.准备工作:先下载一个Inno Setup编译器,这里我用到的是5.3.3中文版的. 软件介绍: Inno Setup 是一个免费的安装制作软件,小巧.简便.精美是其最大特点,支持pascal脚本, ...
- 小试牛刀——爬topit.me的图片,附github简易上传教程
接触了scrapy ,发现爬虫效率高了许多,借鉴大神们的文章,做了一个爬虫练练手: 我的环境是:Ubuntu14.04 + python 2.7 + scrapy 0.24 目标 topit.me 一 ...
- yii教程
http://www.yiichina.com/doc 官网是很好的参考文档
- iOS开发-Masonry简易教程
关于iOS布局自动iPhone6之后就是AutoLayOut,AutoLayOut固然非常好用,不过有时候我们需要在页面手动进行页面布局,VFL算是一种选择,如果对VFL不是很熟悉可以参考iOS开发- ...
- 辛星PHP教程之yii和ci教程已经写完,望与朋友们交流
记得有个朋友给我说,你写的PHP框架是不是过于少了.我感觉仅仅有一个thinkphp确实不好,于是就又写了下yii和ci的教程,事实上我之前是研究过这两个框架的,因此写起来也还算得心应手吧.估计接下 ...
随机推荐
- 【原】iOS触摸事件深度解析
概述 本文主要解析从我们的手指触摸苹果设备到最终响应事件的整个处理机制.本质上讲,整个过程可以分为两个步骤: 步骤1:找目标.在iOS视图层次结构中找到触摸事件的最终接受者: 步骤2:事件响应.基于i ...
- ThinkPHP3快速入门教程二:数据CURD
CURD(创建[Create].更新[Updata].读取[Read].删除[Delete]),定义了用于处理数据的基本原子操作. CURD在具体的应用中并非一定使用create.updata.rea ...
- routes.rb和link_to的一些规则
rails文档中描述了一个知识,link_to方法用于产生链接,但链接是根据routes.rb中的路由规则来产生的.这又分为面向资源和非面向资源两种产生链接的方法.比如 routes.rb文件中有两条 ...
- python操作CouchDB
安装python couchDb库: https://pypi.python.org/pypi/CouchDB/0.10 连接服务器 >>> import couchdb >& ...
- [转]PaaS平台分类
本文转自阿朱说 大家发现没,自从我们上升到有规模的互联网架构后,咱们中国的技能能力就跟不上了,只能采取国际业界顶级大公司开源出来的而且已经经受住大规模实际应用考验的组件来搭架构,因而咱们近几年大规模网 ...
- 最新版Android开发工具
最新版Android开发工具 JUN 27TH, 2014 Android Tools ADT Bundle ADT Bundle包含了Eclipse.ADT插件和SDK Tools,是已经集成好的I ...
- Java 堆
特性: 虚拟机启动时创建的线程共享的内存区域,所有实例对象和数组对象分配内存的区域 GC垃圾手机管理器管理的主要区域,GC堆 容量可以固定,也可以动态扩展,自动收缩 -Xmx最大堆大小 -Xms最小. ...
- java类加载器深入研究
看了下面几篇关于类的加载器的文章,豁然开朗.猛击下面的地址开始看吧. Java类加载原理解析 深入探讨 Java 类加载器 分析BootstrapClassLoader/ExtClassLo ...
- 烂泥:openvpn tun模式下客户端与内网机器通信
本文由秀依林枫提供友情赞助,首发于烂泥行天下 前两篇文章我们介绍了有关openvpn的搭建与配置文件的讲解,这篇文章我们再聊介绍下,在tun模式下openvpn客户端如何与内网机器通信的问题. 一.实 ...
- 如何在Oracle中复制表结构和表数据
1. 复制表结构及其数据: create table table_name_new as select * from table_name_old 2. 只复制表结构: create table ta ...