Yii framework 应用总结小窍门(转)
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("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: 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'));
来自:第五实验室(http://www.5labs.net)
From: http://koda.iteye.com/blog/1134712
Yii framework 应用总结小窍门(转)的更多相关文章
- 拓展Yii Framework(易框架)
1.拓展yii 此文针对Yii1.1.15而写,请注意甄别你的Yii Framework 版本. 拓展yii是开发期间常见的代码处理方式.例如,你写一个新的controller(业务控制器),你通过继 ...
- Yii框架(Yii Framework)部署
一.下载Yii 在部署yii框架之前首先要搭建好php环境,这里就不说搭建环境的问题了(这里已经部署好wampserver了),环境搭建好后,到yii官方网站下载yii framework:http: ...
- VAssistX使用小窍门
日常使用中的一些VAssistX使用小窍门,简单总结下 一,修改VAssistX默认缓存文件路径,防止默认C盘被占用空间过大 1. 打开注册表HKCU\Software\Whole Tomato,新 ...
- MySql批处理的小窍门:排行榜类数据生成
MySql批处理的小窍门:排行榜类数据生成 最近在做新版本的开发,其中涉及到排行榜的批量预生成,在此分享给大家. 关键点 名次的计算(不考虑用游标) 单榜单查询 对于排行榜这种类型的数据,当只查一个排 ...
- WPF中线性渐变画刷的一个小窍门
最近被项目里面控件的设计搞的死去活来的,大部分的设计都会需要使用进度条的功能,因为UI形状的变态,使用ProgressBar不能满足需求,没办法就自己想办法实现进度显示.折腾的多了发现一个很不错的方法 ...
- YII Framework学习教程-YII的异常处理
异常无处不在,作为程序员,活着就是为了创造这些异常,然后修复这些异常而存在的.YII框架封装了PHP的异常,让异常处理起来更简单. 使用 YII处理错误和异常的配置方法: 你可以在入口文件中定义YII ...
- 教你50招提升ASP.NET性能(二十四):ORM小窍门
ORM TipsORM小窍门 More and more people are using Object to Relational Mapping (ORM) tools to jump the d ...
- Yii Framework 开发教程Zii组件-Tabs示例
有关Yii Tab类: http://www.yiichina.com/api/CTabView http://www.yiichina.com/api/CJuiTabs http://blog.cs ...
- YII Framework学习教程-YII的Model-开发规范-路径别名-命名空间
到这里,大概的YII开发已经基本可以,但是下面要将的所有课程,学完之后可以让你更爱YII.下面的教程是讲的MVC的M,model.数据,业务,代码的集中地区.所以开始之前,学学开发规范-路径别名-命名 ...
随机推荐
- linux curl命令验证服务器断点续传支持
有个同事说,发现现在对外下载安装包的服务器不支持断点续传,我听了一阵纳闷,lighttpd server对于静态文件应该默认支持断点续传的,登机器查看lighttpd配置文件发现 对断点续传的支持被禁 ...
- 互联网HTTP连接等出错代码大全
100 - Continue 101 - Switching Protocols Success Codes 200 - OK 201 - Created 202 - Accepted 20 ...
- Educational Codeforces Round 6 D. Professor GukiZ and Two Arrays
Professor GukiZ and Two Arrays 题意:两个长度在2000的-1e9~1e9的两个序列a,b(无序);要你最多两次交换元素,使得交换元素后两序列和的差值的绝对值最小:输出这 ...
- 重复数据插入unique列时,锁加在哪?
1.测试目的 当插入重复数据到有unique索引的表中时,采用何种加锁机制. 2.测试思路 利用10046确定是什么操作导致加锁阻塞了进程: dump锁定前最近一次操作的块结构来分析加锁机制. 3.测 ...
- S3C2440触摸屏控制总结
触摸屏控制原理,其实与ADC读取一个滑动变阻器中间触点电压的原理一样.只不过,读取触摸屏的X.Y方向上的电压需要两次,而且需要设置其工作模式以实现一个ADC读取两个通道的电压. S3C2440的ADC ...
- smarty 比较运算符对照表
smarty 比较运算符对照表 运算符 中文解释 eq 相等 ne.neq 不相等 gt 大于 lt 小于 gte.ge 大于等于 lte.le 小于等于 not 非 mod 求模 is [not] ...
- Discuz!X3.1 全新安装图文教程
http://www.discuz.net/thread-3456887-1-1.html
- 前端性能优化(三)——传统 JavaScript 优化的误区
注:本文是纯技术探讨文,无图无笑点,希望您喜欢 一.前言 软件行业极其缺乏前端人才这是圈内的共识了,某种程度上讲,同等水平前端的工资都要比后端高上不少,而圈内的另一项共识则是--网页是公司的脸面! 几 ...
- Freemarker 对null值报错的处理
忽略null值 假设前提:user.name为null ${user.name},异常 ${user.name!},显示空白 ${user.name!'vakin'},若user.name不为空则显示 ...
- C#连接数据库的一些鲜为人知的方法
用过VS2008和VS2010的开发人员肯定知道在安装这个IDE的时候会自动安装了一个精简版的SQL数据库服务SqlExpress,这个数据库系统少了最重要的企业管理器,也就是说不能用它来建数据表和一 ...