Yii framework 应用小窍门

    xiaoxiao2025-12-31  10

    Yii framework 应用小窍门

     

     

    1. Yii Framework] 如何获取当前controller的名称?  下面语句就可以获取当前控制器的名称了! 

    Php代码  

    Yii::app()->controller->id 2. yii 如何使用第三方插件  第一,比如说,我们要使用 Zendframework的东西。我们把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("md5(name) =1")); 4. yii的controller中外挂action  创建 

    Php代码  

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

    调用 

    Php代码  

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

    5. Yii创建widget 

    Php代码  

    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里面 

    Php代码  

    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文件里面 

    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之后,可以直接这样: 

    Php代码  

    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(); 这个是叫做namedscope,  每个命名范围被声明为一个可以被用来初始化CDbCriteria阵列实例。  如要下面的例子 

    Php代码  

    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里面: 

    Php代码  

    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: application's 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')); 相关资源:python入门教程(PDF版)
    最新回复(0)