原文 http://blog.csdn.net/buyingfei8888/article/details/40457731
这部分主要包含
1 基本控制器、模型、视图使用规则;
2 登录和注册在视图通过表单使用YII小物件并分析;
3 模型中规则制定和分析;
4 控制器用方法形式访问其他类;
5 进行session和cookie分析 ,并在前后区分session和cookie;
6 生成验证码 ;
这期间也会会有错误,会不断修正
先看下目录结构:
1 基本控制器、模型、视图使用规则;
控制器:都需要继承Controller基类 进行外部访问的方法都需要以action做为方法名称的开始。
用方法形式访问其他类,需要定义actions方法,返回一个二维数组
模型:继承CActiveRecord,基本要实现:四个方法,一个是model,是静态public类型,用来返回模型名称,
一个talbeName,用来返回方法名称;
一个是attributeLabels,设置显示内容,将前面视图中英文转化为汉字,进行统一管理
一个是rules,设置一些验证规则
视图:主要是通过小物件来实现,$this -> beginWidget('CActiveForm');
此篇把主要贴下来,下面再进行调用讲解
前台控制器:
<?php
/**
* 用户控制器
*/
class UserController extends Controller{ /* * 验证码生成 * 以下代码的意思:在当前控制器里边,以方法的形式访问其他类 * 我们访问./index.php?r=user/captcha就会访问到以方法的CCaptchaAction * 会走CCaptchaAction类里边的run()方法 * * 谁会过来使用 user/captcha 这个路由 * 答:是视图表单间接过来调用($this->widget('CCaptcha')) */ function actions(){ return array( 'captcha'=>array( 'class'=>'system.web.widgets.captcha.CCaptchaAction', 'width'=>75, 'height'=>30, ), //我们在外边随便定义一个类,都可以通过这种方式访问 // user/co 就会访问Computer.php里边的run()方法 'co'=>array( 'class'=>'application.controllers.Computer', ), ); } /** *用户登录 */ function actionLogin(){ echo $this -> id."<br />"; echo $this -> action->id; //创建登录模型对象 $user_login = new LoginForm; if(isset($_POST['LoginForm'])){ //收集表单信息 $user_login->attributes = $_POST['LoginForm']; //校验数据,走的是rules()方法 //该地方不只校验用户名和密码是否填写,还要校验真实性(在模型里边自定义方法校验真实性) //用户信息进行session存储,调用模型里边的一个方法login(),就可以进行session存储 if($user_login->validate() && $user_login->login()){ $this ->redirect ('./index.php'); } } $this -> render('login',array('user_login'=>$user_login)); } /* * 实现用户注册功能: * 1. 展现注册表单 * 2. 收集数据、校验数据、存储数据 */ function actionRegister(){ //实例化数据模型对象user $user_model = new User(); /** * renderPartial不渲染布局 * render会渲染布局 */ //$this ->renderPartial('register'); //性别信息 $sex[1] = "男"; $sex[2] = "女"; $sex[3] = "保密"; //定义学历 $xueli[1] = "-请选择-"; $xueli[2] = "小学"; $xueli[3] = "初中"; $xueli[4] = "高中"; $xueli[5] = "大学"; //定义爱好信息 $hobby[1] = "篮球"; $hobby[2] = "足球"; $hobby[3] = "排球"; $hobby[4] = "棒球"; //如果用户有注册表单 if(isset($_POST['User'])){ //给模型收集表单信息 //foreach($_POST['User'] as $_k => $_v){ // $user_model -> $_k = $_v; //} //收集转化爱好的信息implode if(is_array($_POST['User']['user_hobby'])) $_POST['User']['user_hobby'] = implode(',',$_POST['User']['user_hobby']); //密码要md5加密 $_POST['User']['password'] = md5($_POST['User']['password']); $_POST['User']['password2'] = md5($_POST['User']['password2']); //上边的foreach,在yii框架里边有优化,使用模型属性attributes来进行优化 //attributes 属性已经把foreach集成好了,我们可以直接使用 $user_model -> attributes = $_POST['User']; //实现信息存储 if($user_model -> save()) $this ->redirect ('./index.php'); //重定向到首页 } $this -> render('register',array('user_model'=>$user_model,'sex'=>$sex,'xueli'=>$xueli,'hobby'=>$hobby)); } function actionCc(){ echo "cc"; } /* * 用户退出系统 */ function actionLogout(){ //删除session信息 //Yii::app()->session->clear(); //删除内存里边sessiion变量信息 //Yii::app()->session->destroy(); //删除服务器的session文件 //session和cookie一并删除 Yii::app()->user->logout(); $this->redirect('/'); } /* * session使用 */ function actionS1(){ echo $this->id."<br />"; echo $this->action->id."<br />"; //设置session,通过session组件来设置 Yii::app()->session['username'] = "zhangsan"; Yii::app()->session['useraddr'] = "beijing"; echo "make session success"; } function actionS2(){ //使用session echo Yii::app()->session['username'],"<br />"; echo Yii::app()->session['useraddr']; echo "use session success"; } function actionS3(){ //删除一个session //unset(Yii::app()->session['useraddr']); //删除全部session Yii::app()->session->clear(); //删除session变量 Yii::app()->session->destroy(); //删除服务器的session信息 } /* * cookie在Yii框架使用 */ function actionC1(){ //设置cookie $ck = new CHttpCookie('hobby','篮球,足球'); $ck -> expire = time()+3600; //把$ck对象放入cookie组件里边 Yii::app()->request->cookies['hobby'] = $ck; $ck2 = new CHttpCookie('sex','nan'); $ck2 -> expire = time()+3600; //把$ck对象放入cookie组件里边 Yii::app()->request->cookies['sex'] = $ck2; echo "cookie make success"; } function actionC2(){ //访问cookie echo Yii::app()->request->cookies['hobby'],"<br />"; echo Yii::app()->request->cookies['sex']; } function actionC3(){ //删除cookie unset(Yii::app()->request->cookies['sex']); } function actionLu(){ //输出路径别名信息/yii就是框架直接可以操作使用的类 //Yii::app() 是一个实例,是在当前框架里边唯一可以直接使用的实例对象 //echo Yii::getPathOfAlias('system'); //D:\www\0507\framework //echo Yii::getPathOfAlias('system.web'); //D:\www\0507\framework\web //echo Yii::getPathOfAlias('application'); //D:\www\0507\shop\protected //echo Yii::getPathOfAlias('zii'); //D:\www\0507\framework\zii echo Yii::getPathOfAlias('webroot'); //D:/www/0507/shop } /* * 使用Yii::app()调用相关属性、方法 */ function actionAp(){ echo Yii::app()->defaultController,