1. Controller向View里面传送数据,View使用Controller的数据
Controller对象的数据,View可以通过$this->varname 来访问。
举例:array("varname1'=>$var1, 'varname2'=>$var2);
View中就使用$varname1, $varname2;
Controller对象从Model取出来的数据,作为临时变量的话,View通过普通的本地变量使用,$varname。
还有一种特例,Widget对象初始化,Controller传进去的特殊临时变量,Widget有他自己特殊的用法,例如:
widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_bookView',
)); ?>
在View中,$data就是$dataProvider提供的数据.
1. 数据访问
两种方式,1是最基本的增删差改(基于单个表的)CActiveRecord类;2是Yii DAO类,包括
以下是参考内容:
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里面
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
{
Puvlic function actionList(){....}
Public function getTitle(){return 'test title';}
}
views的list.php
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
15. yii中如何不加载layout
可以使用renderPartial()来代替render()
16. yii中向widget传值
$this->widget('CMaskedTextField',array('mask'=>'99/99/9999'));
摘自:http://hi.baidu.com/sdstudylife/blog/item/09564a518865926c84352442.html