`

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

分享到:
评论

相关推荐

    Yii2.0学习笔记完全版

    Yii2.0学习笔记完全版 Yii2 Yii2.0 Yii2.0学习 Yii2.0学习笔记

    YII 学习笔记

    这是开源PHP开发框架Yii全方位教程,想要学习yii框架吗,这个笔记可以快速让你了解yii,撑握yii

    Yii框架学习笔记.pdf

    yii框架学习笔记,主要详解请求的处理流程,yii组件、事件和行为,国际化,日志,视图,以及控制台应用。 带注释的源代码下载:https://github.com/kaimixu/yii-book

    Yii框架学习笔记

    Yii提供了今日Web 2.0应用开发所需要的几乎一切功能。Yii是最有效率的PHP框架之一。Yii是创始人薛强的心血结晶,于2008年1月1日开始开发。

    yii2数据缓存 学习笔记

    yii 学习笔记,其中包括数据缓存、缓存组件、缓存过期、缓存依赖的理解及yii2数据缓存的测试代码

    Yii2—yii2学习—某课网学习笔记

    yii2学习笔记,一边看某课网一遍实践一遍总结,整理文档

    YII学习笔记

    半个月的学习笔记 适合初学 YII者。欢迎下载。yII是一门很不错的框架,适合大型项目的快速开发。

    Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)

    主要介绍了Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels),非常不错,具有参考借鉴价值,需要的朋友可以参考下

    Yii框架学习笔记之应用组件操作示例

    本文实例讲述了Yii框架学习笔记之应用组件操作。分享给大家供大家参考,具体如下: 所有的组件都应声明在config/web.php //组件声明在该数组下 'components'=&gt;array( //自定义组件1 - 函数形式 'customComponent1...

    YII框架学习笔记之命名空间、操作响应与视图操作示例

    1.命名空间 &lt;?php /****假设有三个同名的类,输出的值为A,B,C****/ use a\b\c\apple; use d\e\f\apple as bApple; use g\h\i\apple; $app = new apple();//A $app = new bApple();//B $app = new \Apple();//C ...

    Yii框架学习笔记之session与cookie简单操作示例

    本文实例讲述了Yii框架学习笔记之session与cookie操作。分享给大家供大家参考,具体如下: session操作 &lt;?php namespace app\controllers; use yii\web\Controller; class HelloController extends ...

    详解Yii2.0 rules验证规则集合

    我最近也在学习Yii2的路上,那么今天也算个学习笔记吧! required : 必须值验证属性 复制代码 代码如下: [[‘字段名’],required,’requiredValue’=&gt;’必填值’,’message’=&gt;’提示信息’]; #说明:...

    Yii的Srbac插件用法详解

    现在就整理下学习笔记,分享一下。虽然authMangner组件实现了rbac,但是没有实现可视化编辑管 理。目前官方有Srbac 和 Right两个比较好的扩展模块,我们用它们非常方便的可视化管理角色(roles),任务(tasks),操作...

    浅谈Yii乐观锁的使用及原理

    本文介绍了Yii乐观锁的使用及原理,自己做个学习笔记,也分享给大家,希望对大家有用处 原理: 数据表中使用一个int类型的字段来存储版本号,即该行记录的版本号。更新数据时,对比版本号是否一致 sql查询代码如下...

    yifang-read-back-end:阅读程序,使用yii2 + MySQL5.7 +正在学习elasticsearch引擎

    一些问题 是否可以合法使用书籍?...阅读程序,使用进展常驻的swoole +高性能的yii2框架+关系型数据库MySQL5.7 +正在学习全文分布式检索引擎elasticsearch 2020年11月21日13:09:09现在已完成的功能: 前

    GridView联表搜索

    这是本人学习YII2的时候,对前台GridView组件的一点笔记,有连表搜索和排序

Global site tag (gtag.js) - Google Analytics