今天用到了Yii框架,总结一下Yii入门知识,十分钟入门Yii
  • 首页 > 工作时间 > php > 正文
  • 作者:山庄少主
  • 2015年4月3日 16:16 星期五
  • 浏览:14546 次
  • 字号:  
  • 评论:1053 条
  • 字数:12873 个
  • 显示:1200px 1360px 1600px
  • 关灯  编辑

  • Yii框架:MVC框架
    Model:模型
    View:视图
    Controller:控制器

    Yii特点:
    1、美籍华人开发
    2、重量级框架
    3、PDO
    4、没有集成Smarty(显示与逻辑没有分离)
    5、脚手架(自动生成项目目录)


    Yii开发网站的步骤
    1、找到Yii的核心资源包
    2、新建项目
    3、将framework文件夹复制到项目中
    4、利用Yii的脚手架来自动生成项目目录
       1)在framework/yiic,脚手架
       2)打开命令提示符窗口(Linux打开终端)
       3)切换到framework目录中
       4)利用yiic自动生成项目目录
         yiic webapp ../app
       5)输入完上边命令后,点击回车,会出现对话框,点击确定既可
       6)有些学生电脑不识别yiic命令
         解决办法:将php5的路径配置到path环境变量
       7)有些Win7的学生,无权执行此操作
         解决办法:所有程序->附件->命令提示符(鼠标右键->以管理员身份运行)

    项目目录
    app------------------------应用程序
      assets-------------------公用文件
      css----------------------样式表
      images-------------------图片
      protected----------------代码文件
        commands---------------自定义的shell命令
        components-------------组件文件夹
          Controller.php-------所有控制器父类
          UserIdentity.php-----自定义组件的父类
        config-----------------配置文件夹*********
          main.php-------------全局配置文件
        controllers------------控制器文件夹*******
        data-------------------数据库脚本
        extensions-------------扩展的应用程序
        messages---------------翻译过的信息
        migrations-------------移植数据库的脚本
        models-----------------模型文件夹*********
        runtime----------------运行时临时文件目录
        views------------------视图文件夹*********
          layouts--------------母版页文件夹
      themes-------------------主题
      index.php----------------入口文件
    framework------------------yii资源包
      yiic---------------------脚手架
      yiilite.php--------------每个类对应的目录

    控制器的命名规则
    1、必须采用大驼峰的命名规则
    2、必须以Controller来结尾

    控制器中方法的命名规则
    1、必须采用小驼峰的命名规则
    2、必须以action来开头
    actionIndex()   actionLogin()   actionDelete()


    views如何存储模板文件
    1、在views下新建一个控制器名的文件夹
    2、控制名的文件夹下新建视图文件
    views
      控制器
        xxx.php
        xxx.php
        xxx.php
      控制器
        xxx.php

    错误单词
    Error:硬件错误、无法恢复的错误
    Exception:运行时错误(逻辑错误)
    Bug:错误

    设置默认的控制器、方法
    1、找到config/main.php全局配置文件
    2、在main.php中的第一行添加如下代码
       "defaultController"=>"控制器/方法名",

    定义全局使用的常量
    1、找到index.php入口文件
    2、在入口文件中定义常量


    Yii的路由:
    1、访问入口文件(访问的是默认的控制器、默认的方法)
    http://localhost/项目/app/index.php
    2、问号的方式
    http://localhost/项目/app/index.php?r=控制器/方法
    http://localhost/项目/app/index.php?r=控制器/方法/名/值/名/值
    3、pathinfo的方式
    http://localhost/项目/app/index.php/控制器/方法
    http://localhost/项目/app/index.php/控制器/方法/名/值/名/值

    urlManager(url管理):设定pathinfo模式的路径
    1、找到config/main.php全局配置文件
    2、去掉下边代码的注释
    /*
    'urlManager'=>array(
     'urlFormat'=>'path',
     'rules'=>array(
      '<controller:\w+>/<id:\d+>'=>'<controller>/view',
      '<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',
      '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
     ),
     ),
    */


    控制器的定义格式
    class XxxController extends Controller
    {
      public function actionXxx()
      {
     逻辑代码;

        //转发到指定的模板文件
     $this->renderPartial("xxx");

     $data = array(
      "名"=>值,
      "名"=>值,
      "名"=>值
     );
     $this->renderPartial("xxx",$data);
      }
    }


    从控制器转发到指定的视图页面
    1、转发到视图页面,不调用母版页
    $this->renderPartial("index");
    $this->renderPartial("index",数组);
    2、转发到视图页面,调用母版页
    $this->render("index");
    $this->render("index",数组);


    母版页:编写头和脚
    1、在views/layouts下新建一个xxx.php
    2、建议母版页的名字就是项目名(不是必须)
    3、找到componenets/Controller.php
       修改如下代码
       public $layout='//layouts/column1';
       将column1改为母版页的名字(注意:不要扩展名)


    模型的命名规则
    1、必须采用大驼峰的命名规则
    2、必须以表名来命名

    模型的父类
    CFormModel:select、update、delete
    CActiveRecord:select、update、delete、insert

    父类
    class CActiveRecord
    {
      //参数:模型的类名
      public static function model($className)
      {
     include 'protected/models/'.$className.'.php';
     $model = new $className();
     return $model;
      }
    }
    class BbsInfo extends CActiveRecord
    {
      public static function model($className=__CLASS__)
      {
     return parent::model($className);
      }
    }
    控制器
    //获得一个模型对象
    $bbsInfo = BbsInfo::model();


    网站sina
    create database sina;
    use sina;
    1、论坛
    bbs_userInfo
    bbs_bbsInfo
    bbs_reviews
    2、邮箱
    mail_userInfo
    mail_mailInfo

    模型的定义格式
    class 模型名 extends CActiveRecord
    {
      public static function model($className=__CLASS__)
      {
     return parent::model($className);
      }
      public function tableName()
      {
     return "表名";//完整的表名
     return "{{表名}}";//省略了表的前缀的表名
      }
    }


    设置数据库的配置信息
    1、找config/main.php全局配置文件
    2、找到如下代码
    /*
    'db'=>array(
     'connectionString' => 'mysql:host=localhost;dbname=库名',
     'emulatePrepare' => true,
     'username' => 'root',
     'password' => '密码',
     'charset' => 'utf8',
     'tablePrefix'=>'bbs_',//表的前缀
    ),
    */
    3、修改数据库的配置信息


     

    数据库操作
    1、查询多条记录,返回值:二维数组
    $model = 模型::model()或$model = new 模型();
    $result = $model->findAll();
    $result = $model->findAll(条件);
    $result = $model->findAll(array(
     "select"=>"字段,字段...",
     "condition"=>"条件",
     "order"=>"排序的字段",
     "limit"=>"每页显示几条记录",
     "offset"=>"每页记录的起始值"
    ));
    $result = $model->findAllBySql("select语句");

    2、查询一条记录,返回值:一维数组
    $model = 模型::model()或$model = new 模型();
    $result = $model->find();
    $result = $model->find(条件);
    $result = $model->findByPk(主键值);
    $result = $model->findBySql("select语句");

    3、修改记录,返回值:受影响的行数
    $model = 模型::model()或$model = new 模型();
    $result = $model->updateAll(关联数组,条件);
    $result = $model->updateByPk(主键值,关联数组);

    4、删除记录,返回值:受影响的行数
    $model = 模型::model()或$model = new 模型();
    $result = $model->deleteAll(条件);
    $result = $model->deleteByPk(主键值);

    5、添加记录,返回值:布尔值
    $model = new 模型();
    $model->字段 = 值;
    $model->字段 = 值;
    $model->字段 = 值;
    $model->字段 = 值;
    $result = $model->save();

    6、执行sql语句,获得多条记录,返回值:二维数组
    $db = Yii::app()->db;
    $st = $db->createCommand("select语句");
    $result = $st->queryAll();

    7、执行sql语句,获得一条记录,返回值:一维数组
    $db = Yii::app()->db;
    $st = $db->createCommand("select语句");
    $result = $st->queryRow();

    8、执行insert、update、delete语句,返回值:受影响的行数
    $db = Yii::app()->db;
    $st = $db->createCommand("insert|update|delete语句");
    $result = $st->execute();

    9、执行count函数,返回值:一个整数
    $model = 模型::model()或$model = new 模型();
    $result = $model->count();
    $result = $model->count(条件);
    $result = $model->countBySql("select count(*) from 表 where 条件");
    $result = $model->countBySql("select sum(字段) from 表 where 条件");


    Yii框架实现数据库分页的办法
    1、执行sql语句
    2、$model->findAllBySql("select语句");
    3、$model->findAll(array("limit"=>"","offset"=>""));

      
     

     

    跳转页面
    1、从控制器跳转到指定的视图页面,走母版页
    $this->render("xxx");
    $this->render("xxx",关联数组);
    2、从控制器跳转到指定的视图页面,不走母版页
    $this->renderParital("xxx");
    $this->renderParital("xxx",关联数组);
    3、从控制器跳转到其他的控制器(重定向)
    $this->redirect("其他控制器的url地址");


    Yii框架对get参数特殊处理
    class XxxController extends Controller
    {
      public function actionXxx($参数名,$参数名...)
      {
     $变量 = $_GET["参数名"];//正确
      }
    }
    注意:
    1、方法中的参数名必须与get中的参数名相同
    2、方法中一旦添加了参数,那么这个get参数必须存在
       如果get中不存在该参数,报错

    错误处理页面(只能处理404错误[访问的页面不存在])
    1、修改main.php全局配置文件(设置错误页面)
    2、在控制器的方法中获得错误信息
       $error = Yii::app()->errorHandler->error;
       code:错误编号
       type:错误类型
       file:报错文件
       message:错误信息

    路径别名
    system:路径(framework)
    application:路径(app/protected)
    zii:路径(framework/zii)


    面包屑(当前位置)
    1、在母版页中的指定位置添加如下代码
    <?php
      $this->widget("zii.widgets.CBreadcrumbs",array(
     "homeLink"=>"<a href='地址'>网站首页</a>",
     "links"=>$this->breadcrumbs,
     "separator"=>" &raquo; "
      ));
    ?>
    2、在控制器的方法中添加如下代码
    $this->breadcrumbs = array(
      "文本信息"=>"链接地址",
      "文本信息"=>"链接地址",
      "文本信息"=>"链接地址",
      "文本信息"
    );


    网站的架构模式
    C/S:客户端服务器模式
    B/S:服务器模式

    Yii框架中自带的表单挂件(表单封装类)
    framework/web/widgets/CActiveForm.php
    在视图页面添加如下代码来制做表单
    <?php
     //开始一个表单,相当于<form method="" action="" name="" enctype="">
     //$form是CActiveForm类的对象
     $form = $this->beginWidget("CActiveForm",array(
      "action"=>APP."/Login/login",//提交地址
      "method"=>"post",//提交方式
      "htmlOptions"=>array(
       "name"=>"frm",//表单名
       "enctype"=>"multipart/form-data",//设置表单编码方式
      ),
      "enableClientValidation"=>true,//是否支持客户端的表单验证
      "clientOptions"=>array(
       "validateOnSubmit"=>true,//当表单提交时,启动验证
      )
     ));
    ?>
    <?php echo $form->textField()?>
    <?php echo $form->hiddenField()?>
    <?php echo $form->passwordField()?>
    <?php echo $form->textArea()?>
    <?php echo $form->radioButton()?>
    <?php echo $form->checkBox()?>
    <?php echo $form->dropDownList()?>
    <?php echo $form->fileField()?>
    <?php
      $this->endWidget();
    ?>

    yii的表单验证
    1、视图的表单必须用Yii的表单
    2、Yii的表单必须添加如下两个参数
    "enableClientValidation"=>true,//是否支持客户端的表单验证
    "clientOptions"=>array(
       "validateOnSubmit"=>true,//当表单提交时,启动验证
    )
    3、在指定的模型中添加rules方法
    public function rules()
    {
      return array(
     array("表单元素名","验证规则","message"=>"提示信息"),
     array("表单元素名","验证规则","message"=>"提示信息"),
     array("表单元素名","验证规则","message"=>"提示信息"),
      );
    }
    4、在视图页面显示指定的提示错误信息
    <?php echo $form->error(模型对象,"表单元素名")?>


    验证码
    1、Yii提供的验证码
    framework/web/widgets/captcha/CCaptchaAction.php
      (1)回到控制器中,添加如下方法(引用其他类)
         public function actions()
         {
            return array(
        "引用类的别名"=>array(
      "class"=>"引用类的路径"
               ),
        "引用类的别名"=>array(
      "class"=>"引用类的路径"
               ),
        "引用类的别名"=>array(
      "class"=>"引用类的路径"
               ),
     );
         }
       (2)视图页面如何调用
           引用的路径:<?php echo APP?>/控制器/引用类的别名


    在main.php全局配置文件中设置缓存
    'components'=>array(
       "cache"=>array(
     class=>"system.caching.CFileCache"
       ),
       ......
    )

    后台管理的制做(模块):gii功能(自动生成新的模块)
    1、修改main.php全局配置文件,开启gii功能
       (1)去掉gii模块的注释
       (2)添写一个密码(密码随意)
    2、访问gii的地址
       http://localhost/项目/app/index.php?r=gii
       http://localhost/项目/app/index.php/gii
    3、自动生成新的模块
        Controller Generator 自动生成控制器
        Crud Generator  自动生成CURD操作
        Form Generator  自动生成表单
        Model Generator  自动生成模型
        Module Generator  自动生成模块
       (1)点击“Module Generator”
       (2)输入Module ID:“admin”
       (3)点击“Preview”按扭,进行预览
       (4)点击“Generate”生成新的模块
    4、重新配置main.php配置文件
       modules => array(
     "admin",//己经创建的新的模块admin模块
     "webo",//webo模块
     "gii"=>array(
        ....
            )
       )
    5、新的模块访问的地址
    http://localhost/项目/app/index.php?r=模块/控制器/方法/名/值
    http://localhost/项目/app/index.php/模块/控制器/方法/名/值
    http://localhost/bbs/app/index.php/admin/default/index
    6、新模块的目录结构
    modules
      admin
        components--------组件文件夹
        controllers-------控制器文件夹
        messages----------翻译过的信息
        models------------模型文件夹
        views-------------视图文件夹
          layouts---------母版文件夹
        AdminModule.php---当前模块的入口文件
    7、设置后台的默认控制器和方法
       到后台的入口文件中找到init方法,在该方法的最后添加一句代码
       $this->defaultController = "控制器/方法";
    8、设置后台的母版页
       到后台的入口文件中找到beforeControllerAction方法,
       在该方法中的第一句添加一句代码
       $controller->layout = "/layouts/母版文件名";

     

     

     

     

     

     

     

    0
     您审批这篇奏折共花了: 
    今天学习了一下ThinkPHP框架,写了一些总结,十分钟入门。
    编辑器 ueditor用法
    二维码加载中...
    本文作者:山庄少主     文章标题: 今天用到了Yii框架,总结一下Yii入门知识,十分钟入门Yii
    本文地址:http://www.ningguoteng.com/?post=50 百度未收录
    版权声明:若无注明,本文皆为“宁国腾|专业分享网站开发-PHP,软件设计博客”原创,转载请保留文章出处。
      昵称  邮箱  主页
    返回顶部返回首页
    版权所有:宁国腾|专业分享网站开发-PHP,软件设计博客站长:山庄少主主题:国腾博客 v3.3程序:emlog加载耗时:0.270秒查询数据库:43次消耗内存:2.66MB鲁ICP备1500751号