Yii framework 应用小窍门

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')); 
时间: 2024-10-01 06:17:13

Yii framework 应用小窍门的相关文章

PHP开发框架Yii Framework教程(9) UI小组件Widget概述

和通常的应用程序开发框架一样,Yii Framework也提供了一组UI小组件(CWidget)来帮助程序员设计用户界面,小组是 CWidget 或其子类的实例.它是一个主要用于表现数据的组件.小组通常内嵌于一个视图来产生一些复杂而独立的用户界面.例如, 一个日历小物件可用于渲染一个复杂的日历界面.小组件使用户界面更加可复用. 我们可以按如下视图脚本来使用一个小 物件: <?php $this->beginWidget('path.to.WidgetClass'); ?> ...可能会由

PHP Yii Framework应用程序框架教程

PHP开发框架Yii Framework教程(1) 第一个应用Hello World PHP开发框架Yii Framework教程(2) Yii Web应用基础 PHP开发框架Yii Framework教程(3) 为应用添加日志 PHP开发框架Yii Framework教程(4) Hangman猜单词游戏实例 PHP开发框架Yii Framework教程(5) URL管理 PHP开发框架Yii Framework教程(6) CComponent组件 PHP开发框架Yii Framework教程(

PHP开发框架Yii Framework教程(48) 多国语言示例

本例通过Yii Framework 开发教程(11) UI 组件 ActiveForm示例添加中文支持简要说明一下多国语言支持.详细文档可可以 参考Yii文档. 信息翻译是通过调用 Yii::t() 实现的.此方法会将信息从 源语言 翻译为 目标语言. 总体来说 ,要实现信息翻译,需要执行如下几步: 在合适的位置调用 Yii::t() : 以 protected/messages/LocaleID/CategoryName.php 的格式创建 PHP 翻译文件. 每个文件简单的返回一个信息翻译数

PHP开发框架Yii Framework教程(47) 主题 Theme 示例

Theming是一个在Web应用程序里定制网页外观的系统方式.通过采用一个新的主题,可以非常方便的改变应用的外观. 在Yii,每个主题由一个目录代表,包含view文件,layout文件和相关的资源文件,如图片, CSS文件, JavaScript文 件等.主题的名字就是他的目录名字.全部主题都放在在同一目录WebRoot/themes下 .在任何时候,只有一个主题可以被激活 . 提示:默认的主题根目录WebRoot/themes可被配置成其他的.只需要配置themeManager应用部件的属性b

PHP开发框架Yii Framework教程(46) Zii组件-Sortable示例

CJuiSortable显示一个列表,列表中的列表项可以通过拖放重新调整顺序,它封装了 JUI Sortable插件. 其基本用 法如下: <?php Yii::app()->clientScript->registerCss('sortable', " #sortable {list-style-type: none; margin: 0; padding: 0; width: 60%;} #sortable li {margin: 2px; padding: 4px; bo

PHP开发框架Yii Framework教程(45) Zii组件-Selectable示例

CJuiSelectable可以显示一个列表,列表的每个项支持Select事件,它封装了 JUI Selectable插件,其基本用法如下: <?php Yii::app()->clientScript->registerCss('selectable'," #selectable {list-style-type: none; margin: 0; padding: 0; width: 60%;} #selectable li {margin: 2px; padding: 4

PHP开发框架Yii Framework教程(44) Zii组件-Resizable示例

CJuiResizable可以使包含在其中的UI组件支持缩放功能,它封装了 JUI Resizable插件, CJuiResizable基本使用方 法如下: <?php $this->beginWidget('zii.widgets.jui.CJuiResizable', array( 'options'=>array( 'minWidth'=>50, 'minHeight'=>50, 'maxWidth'=>500, 'maxHeight'=>500, ), '

PHP开发框架Yii Framework教程(43) Zii组件-Droppable示例

上篇介绍如果使用UI组件支持拖放,CJuiDroppable表示某个区域可以接受拖拉过来的UI组件,它封装了 JUI Droppable插件 . 我们修改上例,添加一个Droppable区域,当有UI组件拖放到该区域时,显示"Dropped". <?php $this->beginWidget('zii.widgets.jui.CJuiDroppable', array( 'options'=>array( 'drop'=>'js:function(event,

PHP开发框架Yii Framework教程(42) Zii组件-Draggable示例

CJuiDraggable可以使包含着其中的其它UI组件实现拖放功能,它封装了 JUI Draggable插件. 要使某个UI组件可以 拖放,下面为使用CJuiDraggable的基本用法: <?php $this->beginWidget ('zii.widgets.jui.CJuiDraggable', array( 'options'=>array( 'cursor'=>'move', ), 'htmlOptions'=>array( 'style'=>'widt