您当前的位置:首页 > 分类 > 技术资讯 > YII > 正文

Yii framework 应用总结

发布时间:2015-08-31 14:03:09      来源:51推一把
【摘要】1. Yii Framework 如何获取当前controller的名称?下面语句就可以获取当前控制器的名称了!
1. Yii Framework 如何获取当前controller的名称?
下面语句就可以获取当前控制器的名称了!

    Yii::app()->controller->id  

2. yii 如何使用第三方插件
第一,比如说,我们要使用 Zend framework的东西。我们把zend framework解压到 prtected/vendors里面,现在的文件夹为 protected/vendors/Zend/Search/Lucene.php

第二,在controller文件的头部,插入下面代码。
Yii::import(application.vendors.*);
require once(Zend/Search/Lucene.php);
上面代码包含了Lucene.php这个类文件。因为我们用到的是相对路径,所以我们需要改变PHP加载文件的路径,Yii::import 一定要在require_once 之前。

第三,一旦我们设置好了,我们就可以在controller里面使用了。比如说
$lucene=new Zend Search Lucene($pathOfIndex);
$hits=$lucene->find(strtolower($keyword));

3. yii中如何在查询的时候使用数据库函数
比如要使用mySQL中的md5函数,
Test::model()->findAll(new CDbexpression_r("md5(name) =1"));

4. yii的controller中外挂action
创建

    class UpdateAction extends CAction {  
      public function run() {  
        // place the action logic here  
      }  
    }  


调用

    class PostController extends CController {  
      public function actions() {  
        return array( edit=>application.controllers.post.UpdateAction, );  
      }  
    }  



5. Yii创建widget

    class MyWidget extends CWidget {  
      public function init() {  
        // this method is called by CController::beginWidget()  
      }  
      public function run() {  
        // this method is called by CController::endWidget()  
      }  
    }  


通常,widget的视图是是放在components/views里面的,通过CWidget::render()来传递参数的

6. CWidget::init()与CWidget::run()的联系
要创建一个新的挂件(widget),我们主要是要继承两个方法:CWidget::init()和 CWidget::run(),

CWidget::init 调用是发生在我们使用 $this->beginWidget 将挂件插入到一个view里面,
CWidget::run 调用是发生在我们使用 $this->endWidget 这个方法的时候。
如果我们想捕捉和处理两者之间的方法核查办上显示的内容,我们可以在CWidget::init开始输出缓冲,然后在CWidget::run中检索缓冲输出
并作进一步处理。

7. Yii如何使用theme
在main.php 里面配置
return array(
  theme=>basic,
  //......
);
要使用theme里面的资源的话,比如说images, js, css, 应该这样, Yii::app()->theme->baseUrl.”/images/FileName.gif”
Yii::app()->Theme->baseUrl.”/css/default/common.css”

8.Yii 如何在当前页面注册css和js文件
  $cs=Yii::app()->clientScript;
  $cs->registerCssFile($cssFile);
  $cs->registerScriptFile($jsFile);

9.Yii Captcha验证码的使用方法
假设使用的model名字为Comment
Model里面

    public function rules() {  
      return array(  
        ......  
        array(verifyCode,  
               captcha,   
               on => insert,  
              allowEmpty => !Yii::app()->user->isGuest || !extension_loaded(gd)),  
        );  
    }  



View里面
<form action=”/test/xyz” method=”post”>
  <input type=”text” name=”comment[verifyCode]”/>
</form>
Controller里面
public function xyz() {
  $comment = new Comment;
  $comment->validate(insert);
  //因为是insert的时候才会用到captcha,所以要加上参数insert
}

10. 如何调用extension扩展
Components的方法
引入以及定义:
在config.php文件里面

    components=>array(  
      xyz=>array(  
        class=>ext.xyz.XyzClass,  
        property1=>value1,  
        property2=>value2,  
      ),  
    // other component configurations  
    ),  


使用方法:
在任何地方,使用Yii::app()->xyz,就可以直接使用xyz这个component了,而component的加载方式是 lazilycreated的,只要我们不是在preload=array()里面定义,那么就是,当第一次使用的时候,才会实例化的,所以不用担心说把 它放在config.php里面会影响性能。

11. Yii 数据保存时自动插入createTime和updateTime
Yii 1.1 version之后,可以直接这样:

    public function behaviors(){  
      return array(  
        CTimestampBehavior => array(  
          class => zii.behaviors.CTimestampBehavior,  
          createAttribute => create_time_attribute,  
          updateAttribute => update_time_attribute,  
        )  
      );  
    }  


如果model里面已经在使用public function behaviors(),记得要在前面加上parent::behaviors($on);

12. Yii 数据库查询找出最新5个发布的内容
在数据查询的时候,出现下面的是什么意思?
$posts=Post::model()->published()->recently()->findAll();
这个是叫做named scope,
每个命名范围被声明为一个可以被用来初始化CDbCriteria阵列实例。
如要下面的例子

    class Post extends CActiveRecord {  
      ......  
      public function scopes() {  
        return array(  
          published=>array(  
            condition=>status=1,  
          ),  
          recently=>array(  
            order=>createTime DESC,  
            limit=>5,  
          ),  
        );  
      }  
    }  


而$posts=Post::model()->published()->recently()->findAll();的意思就是找出最新的status为1的post的5条记录

13. 在views里面如何调用本controller的方法,获取一定的值
直接在views里面使用$this->method(),如
controller里面:

    class PostController extends Ccontroller {  
       public function actionList(){....}  
       public function getTitle(){return test title;}  
    }  


views的list.php
<?php echo $this->getTitle();?>
这样就可以调用本controller的方法了

14. Yii framework已经定义的命名空间常量
system: Yii framework directory
application: applications base directory
webroot: the directory containing the entry script file
ext: directory of extensions

system: 指向 Yii 框架目录;
zii: 指向 zii library 目录;
application: 指向应用程序 基本目录(base directory);
webroot: 指向包含里 入口脚本 文件的目录. 此别名自 1.0.3 版起生效.
ext: 指向包含所有第三方扩展的目录, 从版本 1.0.8 可用;

15. yii中如何不加载layout
可以使用renderPartial()来代替render()

16. yii中向widget传值
$this->widget(CMaskedTextField,array(mask=>99/99/9999));