yii学习笔记

2 篇文章 0 订阅
yii学习笔记

 

   达内IT老师总结的有关yii学习的笔记,下面分享给大家,希望大家能够提出建议。
 
1、windows下,如果php没有加入环境变量,要使用YII命令行操作,先修改framework/yiic.bat,以便找到php.exe
    if "%PHP_COMMAND%" == "" set PHP_COMMAND=php.exe的绝对路径。
 
2、创建第一个程序
    命令:% yii/framework/yiic webapp /www/app
linux下:/framework/yiic webapp ../app
如果切换到/framework下的话,使用./yiic webapp ../app
 
3、yiic shell错误提示
    Error: index.php does not exist or is not an entry script file.
  解决方法:
    yiic shell ../../index.php //找到index.php文件
 
4、修改项目文件夹 protected/config/main.php
    如果用Gii,去掉Gii的注释
    默认数据库配置为sqlite,注释掉sqlite的配置,下面是mysql的配置,去掉注释
    数据库后面写上要用的表名前缀  如'tablePrefix' =>  'tbl_',
 
5、利用Gii创建模型(Model)
    访问Gii:http://localhost/blog/index.php?r=gii
    输入密码,点Model Generator
    一个数据表对应一个Model
 
6、实现CRUD操作
    Gii页面,转到Crud Generator
    需要哪个模型实现CRUD操作就一个一个写上去生成
 
7、路由:http://localhost/yiidemo/index.php?r=user/login
 
8、创建一个控制器:UserController.php   views文件夹也要有一个user文件夹
 
9、render是调用layout渲染一个view,并显示出来。
  renderPrtial直接显示一个view。
  renderText是显示一个静态的string字符串
 
10、修改布局文件:protected/components/Controller.php  public $layout='//布局文件目录/布局文件名';
 
11、测试yii框架是否有连接上控制器
    在控制器里面随便一个地方输出:var_dump(Yii::app()->db)
 
    Yii::app():Yii框架是纯OOP框架,每次web请求,相当于通过创建一个对象,让对象调用相关方法执行。对象是我们框架应用的核心对象,我们也可以通过代码获得这个应用对象(Yii::app())
 
12、find()会产生一条记录信息,其会返回一个直接对象出来
   我们可以通过对象调用自己的属性直接获得具体商品信息
   对象->属性;
 
   findAll()  返回了一个数组,里边有好多对象元素信息,用foreach遍历然后才能输出
   find()  直接返回了一个对象,可以通过对象获得具体商品信息。
 
   通过sql语句获得信息:fandAllBysql($sql)
 
13、表单处理
 
    <form>开始:<?php $form = $this->beginWidget('CActiveForm'); ?>
    </form>结束:<?php $this -> endWidget(); ?>
 
    //表单前面的名字(用户名、商品名之类的,不过是用英文表示)
    <?php echo $form->labelEx($model,'字段名'); ?>
    //表单的输入框
    <?php echo $form->textField($model,'字段名',array('size'=>60,'maxlength'=>128)); ?>
    //表单的文字域
    <?php echo $form->textArea($model,'字段名',array('cols'=>30,'rows'=>5)); ?>
 
    checkBox():复选框
    dropDownList():下拉列表
    radioButton():单选按钮
    listBox():列表框
    passwordField():密码框
    fileField():上传控件
 
    查询:findAll($condition,$param)
        $condition 就是数据库查询where条件
        例:$serch = $model -> findAll("name like :name and price > :price",array(':name'=>'诺%','price'=>500))
        //想要查询具体的"字段" select
        //想要查询具体的"条件" condition
        //想要查询具体的"排序" order
        //想要查询具体的"分组" group
        //想要查询具体的"限制" limit
        //想要查询具体的"偏移量" offset
 
        $infos = $model -> findAll(array(
            'select'=>'goods_name,goods_price',
            'condition'=>"goods_name like '诺%'",
            'order'=>'goods_price desc',
            'limit'=>3,
            'offset'=>6,
        ));
 
        //通过criteria实现信息的查询
                $criteria = new CDbCriteria();
                $criteria -> select = "goods_name,goods_price";
                $criteria -> condition = "goods_name like '摩%'";
                //$criteria -> limit = 6;
                $criteria -> order = "goods_price";
                $infos = $model -> findAll($criteria);
 
14、模型有两个关键方法
 
    创建数据模型model对象
    new Goods();    调用save()方法的时候执行insert语句
    Goods::model(); 调用save()方法的时候执行update语句
 
    /**
     * 返回当前模型对象的静态方法
     * @param string $className
     * @return CActiveRecord
     */
    public static function model($className = __CLASS__){
        return parent::model($className);
    }
 
    /**
     * 返回当前数据表的名字
     * @return string
     */
    public function tableName(){
        return '{{数据表名,不带前缀}}';
    }
 
    另外,表单前显示的中文要用attributeLabels()
     public function attributeLabels(){
             return array(
                 '字段名' => '显示的中文名'
             );
     }
 
     表单验证方法 rules(){
        return array(
            array('字段名','required(必须填写的意思)','message'=>'显示的内容'),
            array('字段名','required(必须填写的意思)','message'=>'显示的内容'),
            array('repassword','compare(匹配后面的值)','compareAttribute(用于比较的属性)'=>'password','message'=>'显示的内容'),
            array('username','length','min'=>3,'max'=>12,,'message'=>'用户名必须大于3个字符,小于12个字符'),
            array('username,email','unique(唯一)'),
            array('email','email(匹配email)'),
        );
     }
     加ajax处理方法
        <?php $form = $this->beginWidget('CActiveForm',
             array(
                'id'=>'_form',
                'enableAjaxValidation'=>true,//开启ajax验证
                'enableClientValidation'=>true,//开启客户端验证,生成js
        )) ?>
 
     储存之前做的处理
      public function beforeSave(){
             if($this->isNewRecord){   //如果是新插入
                 $this->password = $this->encypt($this->password);
                 $this->creattime = time();
             }
             return true;
         }
 
15、把数据传递到模版方法
    $this->render('模版名',array('传递的名字'=>需要传递的变量,......))
 
16、yii数据添加三个步骤
 
 
    一、创建对象模型
        $model = new 模型类名;
    二、要添加的字段数据
        $model -> 字段名 = '数据';
        $model -> 字段名 = '数据';
        $model -> 字段名 = '数据'
    三、调用save()方法实现数据添加
        if($model -> save()){
            echo 'success';
        }else{
            echo 'fail';
        }
 
17、$this->redirect('连接地址')      转到连接地址,比如if语句执行成功后转到链接地址
 
18、attributes属性已经集成foreach,可以直接使用,方法:
    $model->attributes=$_POST['User'];
    等于foreach($_POST['User'] as $key=>$value){
        $model->$key=>$value;
    }
 
19、$form->dropDownlist($model,'id'/*要写入的字段*/,CHtml::listData($menus,'id','menuname'),array('encode'=>false))
    Chtml::dropDownList('pid',$id,CHtml::listData($menus,'id','menuname'),array('encode'=>false)  默认选中
 
    例子:
    <?php echo Chtml::dropDownList('Menu[pid]',$pid,CHtml::listData($menus,'id','menuname'),array('encode'=>false,'empty'=>'=顶级菜单='))?>
            Menu[pid]----要写入数据库的值
            $pid------要选中的选项(主键)
            CHtml::listData------用来生成列表选项的数据(数组格式)
 
 
20、public function rules(){
    return array(
        array('username','required','requiredValue'='张三','message'=>'用户名必须为“张三”')
        array('pid','numerical','integerOnly'=>true)
        )
    }
 
21、用户登录实现
    用LoginForm模型
    第一步实例化,$login=new LoginForm;
    第二步收集表单信息,$login->attributes=$_POST['LoginForm'];
    第三步校验信息,if($login->validate() && $login->login()){};validate()方法校验数据走rules方法,是否填写正确在模型用自定义方法校验;login()方法校验是否持久化储存成功(session)
 
    前台判断是否登录:<?php echo Yii::app()->user->getIsGuest ?>(游客登录),输出登录名<?php echo Yii::app()->user->name ?>
 
22、提示信息Flash
    setFalsh(); 设置提示信息
    getFalsh(); 获取提示信息
    hasFalsh(); 提示信息有无
 
    例如:
        setFlash('success','登陆成功');  //当执行的时候会在session里存储‘success’信息
        hasFlash('success');    //当执行时会判断session里有没有success这个变量
        getFlash('success');    //当执行时会获取session里变量名为success的变量值,之后会删除session里的这个变量
 
 
23、session操作
    Yii框架封装的Yii::app->session;
 
    设置session变量:
    Yii::app()->session['var']='value';
    使用: echo Yii::app()->session['var'];
    移除: unset(Yii::app()->session['var']);
 
    更为复杂一点的使用时如何配置你的session
    配置项可设在 protected/config/main.php的components中:
 
    'session'=>array(
       'autoStart'=>false(/true),
       'sessionName'=>'Site Access',
       'cookieMode'=>'only',
       'savePath'='/path/to/new/directory',
    ),
 
    将session保持在数据库的设置:
    'session' => array (
        'class' => 'system.web.CDbHttpSession',
        'connectionID' => 'db',
        'sessionTableName' => 'actual_table_name',
    ),
 
    好,还有什么呢?对了,为了调试,有时需要知道当前用户的session ID,
    该值就在 Yii::app()->session->sessionID 中。
 
    最后,当用户退出登录(logout),你需要消除痕迹,可使用:
    Yii::app()->session->clear() 移去所有session变量,然后,调用
    Yii::app()->session->destroy() 移去存储在服务器端的数据。
 
24、创建超链接
    Yii::app()->createUrl($route,$params);
 
25、CDbCriteria常用
     $criteria = new CDbCriteria;
     $criteria->addCondition("id=1"); //查询条件,即where id =1
     $criteria->addInCondition('id', array(1,2,3,4,5));//代表where id IN (1,23,,4,5,);
     $criteria->addNotInCondition('id',array(1,2,3,4,5));//与上面正好相法,是NOT IN
     $criteria->addCondition('id=1','OR');//这是OR条件,多个条件的时候,该条件是OR而非AND
     $criteria->addSearchCondition('name','分类');//搜索条件,其实代表了。。where name like '%分类%'
     $criteria->addBetweenCondition('id', 1, 4);//between1 and 4
 
     $criteria->compare('id',1);   //这个方法比较特殊,他会根据你的参数自动处理成addCondition或者addInCondition,
                                       //即如果第二个参数是数组就会调用addInCondition
 
     $criteria->addCondition("id = :id");
     $criteria->params[':id']=1;
 
     $criteria->select = 'id,parentid,name';//代表了要查询的字段,默认select='*';
     $criteria->join = 'xxx'; //连接表
     $criteria->with = 'xxx';//调用relations
     $criteria->limit =10;   //取1条数据,如果小于0,则不作处理
     $criteria->offset =1;   //两条合并起来,则表示 limit 10 offset1,或者代表了。limit 1,10
     $criteria->order = 'xxx DESC,XXX ASC' ;//排序条件
     $criteria->group = 'group 条件';
     $criteria->having = 'having 条件 ';
     $criteria->distinct = FALSE;//是否唯一查询
 
26、YII获取另一个控制器的方法
    $minfo = Yii::app()->runController('admin/models/list');    用runController获取admin模块下面的models控制器下的actionList方法
 
27、YII取得数据库数据
    Yii::app()->db->createCommand()->select('*')->from('{{model}}')->queryAll();
 
28、YII插入meta信息
    Yii::app()->clientScript->registerMetaTag('keywords','关键字');
    Yii::app()->clientScript->registerMetaTag('description','一些描述');
    Yii::app()->clientScript->registerMetaTag('author','作者');
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值