2023年4月26日发(作者:即席查询)r{
t$name="briup";
tpublic function actionIndex(){
tt$this->renderPartial('index图的独立的组件,比如有可能是一
个复杂的日历组件,一个签到模块等。
1.首先我们在protected目录下创建一个widget目录
2.比如我们要创建一个签到组件,取名为sign,在widget目录下
创建一个sign目录。
3.在sign目录下创建一个文件
<?php
class signWidget extends Cwidget{
public function init()
{
//当视图中执行$this->beginWidget()时候会执行这个方法
//可以在这里进行查询数据操作
}
public function run()
{
//当视图中执行$this->endWidget()的时候会执行这个方法
//可以在这里进行渲染试图的操作,注意这里提到的视图
tt是widget的视图
//注意widget的视图是放在跟widget同级的views目录下面,
tt例如sign的视图会放置在
// /protected/widget/sign/views/
$this->render('sign到数据库连接对象。
##########################################################
##########################################################
第四步:Yii的DAO(Databa access objects数据库操作对象)
1.数据查询,可分为两种模式:
1.1 $command=$db->createCommand($sql);
t//如果需要的话$command->text=$newsql;可以更改sql语句
t$rows=$command->queryAll(); //返回所有记录
t$row=$command->queryRow();//返回一条记录
t$column=$command->queryColumn();//返回第一列的所有数据
t$v苏小小
al=$command->queryScalar();//返回第一列的第一个值(非数组)
1.2 $command=$db->createCommand($sql);
t//如果需要的话$command->text=$newsql;可以更改sql语句
t$res=$command->query();
twhile($row=$res->read())!==fal)){
tt$rows[]=$row;
t}
t或者 $rows=$res->readAll();
2.非查询
t$command=$db->createCommand($sql);
t//如果需要的话$command->text=$newsql;可以更改sql语句
t$res=$command->execute();//返回影响的记录条数
3.事物处理
t$transaction=$db->beginTransaction();
ttry
t{
t$db->createCommand($sql1)->execute();
t$db->createCommand($sql2)->execute();
t//....
t$transaction->commit();
t}
tcatch(Exception $e) // 如果捕获异常
t{
t$transaction->rollBack();
t}
t
4.占位符的使用,防止sql注入攻击
t$sql="lect * from goods where name <> :name";
t$command=$db->createCommand($sql);
t$name="longbb";
t$command->bindParam(":name",$name,PDO:PARAM_STR);
t$res=$command->queryAll();
5.不使用完整的sql语句的CRUD操作,Command对象
t$command =$db->createCommand();// 注意参数留空了。。
t// 可用的方法列表如下:
t->from(): 构建FROM子句
t->lect(): SELECT子句
t->lectDistinct(): SELECT子句,并保持了记录的唯一性
t->where(): 构建WHERE子句
t->join(): 在FROM子句中构建INNER JOIN 子句
t->leftJoin(): 在FROM子句中构建左连接子句
t->rightJoi坐山观虎斗
n(): 在FROM子句中构建右连接子句
t->naturalJoin(): 添加一个自然连接子片段
t->group(): GROUP BY子句
t->having(): 类似于WHERE的子句,但要与GROUP BY连用
t->order(): ORDER BY子句
t->limit(): LIMIT子句
详解:
5.1.1
t// 使用from() 如果制定了多个表需要使用逗号分隔的字符串,
t就像原生SQL语句那样:
tfrom('tbl_ur, tbl_post, tbl_profile');
t// 当然,你也可以使用表别名, 还可以使用完整的数据库限定名
tfrom('tbl_ur u, _profile p');
t
5.1.2t
tlect()默认返回全部列(*);
t// 但你可以这样:
tlect('urname, email');
t// 或使用表限定,或使用别名
tlect('tbl_, urname name');
t// 或使用数组作为参数
tlect(array('id表中没有主键,那么我们在使用AR的时候就不太方便,
这个时候只需要在Ur类中重写primaryKey()方法
public function primaryKey(){
treturn 'id';
t//如果主键是联合的
t//return array('id->join = 'xxx'; //连接表
$criteria->with = 'xxx';//调用relations
$criteria->limit =10; //取1条数据,如果小于0,则不作处理
$criteria->offt =1; //两条合并起来,则表示 limit 10 offt1,或者代表了。limit 1觉得的英文
,10
$criteria->order = 'xxx DESC,XXX ASC' ;//排序条件
$criteria->group = 'group 条件';
$criteria->having = 'having 条件 ';
$criteria->distinct = FALSE;//是否唯一查询
##############################################################
##############################################################
加载Css、JavaScript文件
//有时候需要在某个控制器下增加相应layout不存在的CSS 或JavaScript 文件,我们可以在控制器里注册新的CSS或JavaScript,具体控制器的代码如下:
Yii::app()->clientScript->registerCssFile(Yii::app()->baUrl.'/css/');
Yii::app()->clientScript->registerScriptFile(Yii::app()->baUrl.'/css/');
引入jquery核心部件
Yii::app()->clientScript->registerCoreScript('jquery');
#注意:以上代码要放置在控制器里面实现,而不能放在View里,
//Yii框架自带了jquery,如果版本不符合你需要使用的版本,就在中添加如下代码
//添加在components里面
'clientScript'=>array(
ttt'scriptMap'=>array(
tttt''=>'/common/'
ttt)
tt),
tt
如果使用renderPartial()方法的话,注意把第四个参数设置为true.(render()的第四个参数默认为true)
网站根目录,应用: Yii::app()->baUrl;
#########################################################
#########################################################
Yii::import();
首先需要在中设置别名:
//设置'mymodel' 为上上级目录下目录mymodel的别名
'alias'=>array('mymodel'=>realpath(dirname(__FILE__).'/../../mymodel')),
//利用别名导入文件
'import'=>array('mymodel.*'),//导入mymodel目录里的所有类文件
//也可以在控制器或者AR中进行导入
Yii::import('mymodel.*');
########################################################
########################################################
如果在里面添加:
'controllerMap'=>array(
'admin'=>array(
'class'=>'ontroller'
)
在extensions目录里面创建 ,代码如下:
class AdminController extends CController{
tpublic function actionIndex(){
ttecho "Admin";
t}
}
在浏览器就可以访问:
yourhost/admin/index,
输出 Admin
如果要使用模版的话,需要修改viwePath属性,但是此属性什么水永远用不完
不能更改,
只能通过Yii::app()->tViewPath('newPath')更改,可以把这句话加在此控制器的init()方法里。
#######################################
######################################
使用Component:
首先在文件中的components数组中添加:
'components'=>array(
tt'mycom'=>array(
ttt'class'=>'l是自定义的别名
tt),
)
然后在任何地方都可以通过Yii::app()->mycom 来得到Helper的对象了。
Helper类的代码:
class Helper extends CComponent{
tpublic $name="help";
tpublic function init(){
tt//不可缺少此init方法
t}
tpublic function test(){
ttecho "this is a compnent test";
ttecho $this->name;
t}
}
#############################################
#############################################
使用gii创建对应的model或者是module
在中打开gii组件,然后在浏览器中访问yourhost/gii/就可以了。
################################################
################################################
使用gii创建module,如创建module ->Ronnie
则在modules目录下会生成一个Ronnie目录 里面有controller,components,views,models等完整的目录
注册module:在文件中的module对应的数组中添加
'Ronnie'=>array(
ttt'class'=>'Module'
tt),
tt
然后浏览器就可以输入访问:yourhost/Ronnie/default/index
访问的是Ronnie模块的DefaultController的actionIndex()
#注意:如果系统原本就有ronnie控制器,则在url中小写ronnie表示系统的控制器,
大写Ronnie表示是Ronnie模块。
##################################################
##################################################
使用Validator类:
自定义的validator必须继承CValidator,并重写validateAttribute($object,$attribute)方法;
class MyValidator extends CValidator{t
ttprotected function validateAttribute($object, $attribute){
tt//取出需要被验证的数据
tt$value=$object->$attribute;
tt//一些验证的逻辑处理
ttif(strlen($value)==15){
ttt$value = $this->idc国考和省考的时间
ard15to18($value);
tt}
tt
ttif(!$this->idcardChecksum18($value))
tt{t//设置错误信息
ttt$message=$this->message!==null?$this->message:Yii::t('yiin: CRangeValidator 的别名,确保数据在一个预先指定的值的范围之内。
length: CStringValidator 的别名,确保数据的长度在一个指定的范围之内。
match: CRegularExpressionValidator 的别名,确保数据可以匹配一个正则表达式。
numerical: CNumberValidator 的别名,确保数据是一个有效的数字。
required: CRequiredValidator 的别名,确保特性不为空。
type: CTypeValidator 的别名,确保特性是指定的数据类型。
unique: CUniqueValidator 的别名,确保数据在数据表的列中是唯一的。
url: CUrlValidator 的别名,确保数据是一个有效的 URL。
一个自定义的FormModel的实例:
<?php
class RegForm extends CFormModel
{
tpublic $ur_account;
tpublic $ur_password;
tpublic $ur_password_repeat;
tpublic $ur_name;
tpublic $id_card;
tpublic $verifycode;
tpublic $agree;
t
tpublic function rules()
t{
ttreturn array(
ttt吹笛子的口型
array('ur_account, ur_password, ur_password_repeat, ur_name, id_card, verifycode'); ?>
<?php echo CHtml::activeTextField($model,'urname') ?>
<?php echo CHtml::activeLabel($model,'password'); ?>
<?php echo CHtml::activePasswordField($model,'password') ?>
<?php echo CHtml::activeCheckBox($model,'rememberMe'); ?>
<?php echo CHtml::activeLabel($model,'aefaefeafafaefafaf'); ?>
<?php echo CHtml::submitButton('Login'); ?>
<?php echo CHtml::endForm(); ?>
t或者前端:
t<?php $form=$this->beginWidget('CActiveFormclass="row submit"> //提交和重置按钮
众所周知的意思
<?php echo CHtml::submitButton('Login'); ?>
tt<?php echo CHtml::retButton('Ret'); ?> tt