Yii使用技巧大汇总(5)

public function actionForm() { $post = new Post(); if(isset($_POST['ajax']) && $_POST['ajax']==='post'){ echo CActiveForm::validate($post); Yii::app()->end(); } if(isset($_POST['Post'])){ $post->attributes = $_POST['Post']; if($post->save()){ echo '存成功了'; } } $this->render('form',array('post'=>$post)); }

在view中

<?php $form = $this->beginWidget('CActiveForm',array( 'id'=>'post',//这里与Controller中的ajax对应 'enableAjaxValidation'=>true, )); ?> <?php echo CHtml::errorSummary($post); ?> <?php echo $form->labelEx($post,'title');?> <?php echo $form->textField($post,'title')?> <?php echo $form->error($post,'title'); ?>

error一定要写上,要不不会触发ajax验证

<?php echo $form->labelEx($post,'content');?> <?php echo $form->textField($post,'content')?> <?php echo CHtml::submitButton($post->isNewRecord ? 'Create' : 'Save'); ?> <?php $this->endWidget(); ?> //CBreadcrumbs常用代码 <?php $this->widget('zii.widgets.CBreadcrumbs', array( 'links'=>$this->breadcrumbs, 'homeLink'=>'<span><a href="https://abc.com">shouye</a></span>', 'separator'=>'>>>' )); ?>

其中breadcrumbs中Controller中的一个属性,如果要出现导航,就要在view中给此属性附值

生成的html如下

<div> <span><a href="https://abc.com">shouye</a> </span>&gt;&gt;&gt;<span>Managde Posts</span>&gt;&gt;&gt; <span>b</span>&gt;&gt;&gt;<span>c</span></div>

所以如果网站用到导航的时候,美工最好把导航代码定义如上

//CDetailView  用在仅仅是为了查看数据时,还是比较有用的,比如用在后台

如何在提交后显示一段提示

在控制器中

if(isset($_POST['name'])){ Yii::app()->user->setFlash('success','you are success'); $this->refresh(); }

在view中

if (Yii::app()->user->hasFlash('success')){ echo 're is'.Yii::app()->user->getFlash('success'); }else{ echo 'no'; }

如何得到当前域名:

复制代码 代码如下:

app()->request->hostInfo


activeDropDownList,给出提示,并有值

array('empty'=>array(0=>'选择分组') <input type="submit" value="提交" />

验证码如何生成及验证:

Controller中:

public function actions() { return array( 'captcha'=>array( 'class'=>'CCaptchaAction', 'backColor'=>0xFFFFFF, 'maxLength'=>4, 'minLength'=>4, ), ); }

View中

<?php echo CHtml::activeTextField($user, 'verifyCode');?> <?php $this->widget('CCaptcha',array( 'captchaAction' => '/site/captcha', 'showRefreshButton' => false, 'clickableImage' => true, 'imageOptions' => array('align'=>'top', 'title'=>'重新获取'), )); ?>

Model中

array('verifyCode', 'captcha', 'captchaAction'=>'site/captcha', 'message' => '输入的验证码不正确'), set_time_limit(0);//禁止角本超时

如何想把手工的东西记录的数据库

main.php中配置log

array( 'class'=>'CDbLogRoute', 'levels'=>'info', 'logTableName'=>'Log', 'connectionID'=>'db', ),

应用时

复制代码 代码如下:

Yii::log('信息','info');


deleteAllByAttributes(array("phone"=>$phones)直接接受一个数组,可以删除数组中符合条件的记录

YII_BLOG STUDY重新看了一遍yii blog,有些记录会与上边的重复

YII:Trace() 在debug模式是才记录信息,同时在main.php中的Log中的配置中的levels中要有trace,至于记录多少

栈由index.php中的YII_TRACE_LEVEL决定

配置Gii

'modules'=>array( 'gii'=>array( 'class'=>'system.gii.GiiModule', 'password'=>'123', ), ),

获得客户端IP

if($_SERVER['HTTP_CLIENT_IP']){ $ip = $_SERVER['HTTP_CLIENT_IP']; }elseif($_SERVER['HTTP_X_FORWARDED_FOR']){ $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; }else{ $ip = $_SERVER['REMOTE_ADDR']; }

CActiveForm还是比较强大的,建议在以后的项目中form都用这个来实现

layout/中的视图是可以继承的

复制代码 代码如下:

<?php $this->beginContent('/layouts/main'); ?>


然后在中间出现$content即可

复制代码 代码如下:

<?php $this->endContent(); ?>


create,update最好是分开放在两个action中,共用一个form,中间可以加一层view,以在头尾显示不同的东西

成段的完成一个功能的代码尽量拿出来放到一个方法中

$this->beginWidget('CMarkdown', array('purifyOutput'=>true)); echo $data->content; $this->endWidget();

linkButton,在删除时需要用js提示,可以看下这此组件中的comfirm

而且他们的提交方式都是post,是因为在jquery.yii.js写死了

具体的以在源文件中低部找到那段js中的ajaxsubmit,所在的js看下

filter是在执行action之前或之后执行的一段代码,要应用filters必须得写

CController::filters()方法

为什么在filters方法写上

return array( 'accessControl', // perform access control for CRUD operations );

能进行crud验证呢?

accessController是CContronller内置的filter,其调用
accessRules,得到验证规定,所以也要重写对应的accessRules,返回一个验证规则的数组成部分

if the application uses modules,
a root alias is also predefined for each module ID and refers to the base path of the corresponding module

如:echo YiiBase::getPathOfAlias('bbs');得到module bbs的路径

关于CUrlManager

复制代码 代码如下:

'模式'=>'route'


matchValue是指,对于一个url规则,正常情况下是只看参数的名子是否一样就应用规则

如果matchValue=true,则也要看值

如,规则

'index-/<id:d+>'=>array("book/index",'matchValue'=>false), $this->createUrl('book/index', array('id'=>'abcd'));

可以应用以上规则的,

如果规则中的matchValue=true,则就不能应用了

XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。

它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,
嵌入其中Web里面的html代码会被执行

renderPartial()
render()

后者会把需要的js,css等嵌入

前者可以通过把最后一个参数设置成true完成一样的功能

addInCondition 不用考虑数组是空的情况yii会自动处理

如何得到当前url?

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/2f8106786391352ef2279db1bd51a4b1.html