yii学习笔记1

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','作者');