YiiFramework 随笔(三)

删除按钮 带确认项
1. 在tpl中
<?php echo CHtml::Button(‘cancel’, array (
‘submit’ => ‘DeleteUser’,
‘params’ => ”,
‘confirm’=>’Are you sure?’
)) ?>
$this->redirect(array(‘category/show’,array(‘id’=>1,’rule_id’=>’1’))); 这样写就可以传送参数用get方法接收
2. 原始代码
<?php echo CHtml::linkButton(‘Logout’,array(
‘submit’=>”,
‘params’=>array(‘command’=>’logout’),
)); ?>
<?php echo CHtml::Button(‘Delete’, array (
‘submit’ => $this->createUrl(‘post/delete’,$this->getReturnParams()),
‘params’ => array(‘id’=>123),
‘confirm’=>’Are you sure?’
)) ?>

代码可以先取出用户已经选的选项,再赋值到前台页面中
<?php foreach($options = $tempradio as $key => $value): ?>
<?php
if ($field->value == $key)
echo “<span class=’radio’>”,CHtml::radioButton($field->id, true, array(“class” => “noborder”, “value” => $key)),$value,”</span>”;
else
echo “<span class=’radio’>”,CHtml::radioButton($field->id, false, array(“class” => “noborder”, “value” => $key)),$value,”</span>”;
?>
<?php endforeach; ?>

tpl调用jquery的AJAX
1.tpl中 调用js中的函数startAlert()
<?php echo CHtml::Button(‘Flag’, array(“id” => “cb_btn_$field->id”, “name” => “cb_btn_$field->id”, “onclick” => “startAlert(‘$field->id’)”));?>
2.js中
function startAlert(id){
$.ajax({
type: “POST”,
url: “../../Change”,
data: “id=”+id+”&location=Boston”,
success: function(msg){
//alert( “Data Saved: ” + msg );
document.getElementById(‘cb_’+id).innerHTML=msg;
}
});
}

注意:data传递参数是post且格式如下”id=”+id+”&location=Boston” 可以传递N个变量
url :填写路径是有技巧的
1. 当URL路径 trunk/bo/index.php/category/show/id/1 意义为 在categorycontroller下的 actionshow中 id是参数名 1 为参数值
这样时候 AJAX需要写”../../Change” 网上递归两层
2. 当URL路径 trunk/bo/index.php/category/fill 意义为 在categorycontroller下的 actionfill中
这样时候 AJAX需要写”Change” 不需要递归

main.php 里面的内容包括
1》 params 文件的应用
1.protected/config/main.php 中进入这个文件’params’ => include(dirname(__FILE__) . ‘/params.php’)
相当于引入了一些全局静态变量到系统中
2. 实际的操作方法为。在tpl文件中可以引用 Yii::app()->params[‘TEXT_TYPE’]

2》 http://www.yiiframework.com/doc/guide/zh_cn/topics.url
设置网页上的URL 把带问号的参数?r=site/login,变成/组成的URL
opentax/trunk/bo/index.php?r=site/login ====》 opentax/trunk/bo/site/login
1. ‘components’ => array(这里增加一个数组
‘urlManager’ => array(
‘urlFormat’ => ‘path’,
‘showScriptName’ => ‘false’,
‘urlSuffix’ => ‘.html’, //传递参数后会自动添加此后缀名,用于欺骗作用的下标。id/1 ===> id/1.html
),
)
3》 http://www.yiiframework.com/doc/guide/zh_cn/topics.theming
设置新主题 theme 相当于整个网站的新tpl风格
‘theme’ => ‘opentax’, 与components数组平行
Yii::app()->theme->baseUrl . ‘/images/FileName.gif’ 需要调用theme中的图片时候,可以用此地址

4》 http://www.yiiframework.com/doc/guide/zh_cn/topics.logging
在components中设置,可以用来输出特出的值
‘log’ => array(
‘class’ => ‘CLogRouter’,
‘routes’ => array(
array(
‘class’ => ‘CFileLogRoute’,
‘levels’ => ‘error, warning’,
‘class’=>’CWebLogRoute’, //当加上这两句话时候,程序就显示一个关于执行过程的表格易于开发,但是发布时候需要去除,不然影响程序速度(http://www.yiiframework.com/forum/index.php/topic,2004.0.html)
‘levels’=>’trace’, //当加上这两句话时候,程序就显示一个关于执行过程的表格易于开发,但是发布时候需要去除,不然影响程序速度
),
),
),

5》 增加数据库的连接文件
‘db’=>array(
‘class’=>’CDbConnection’,
‘connectionString’=>’mysql:host=localhost;dbname=ox’,
‘username’=>’root’,
‘password’=>”,
),

6》 http://www.yiiframework.com/doc/guide/zh_cn/topics.prado
模版引擎
在components中添加
‘viewRenderer’=>array(
‘class’=>’CPradoViewRenderer’,
),

7》 http://www.yiiframework.com/doc/guide/zh_cn/topics.security
安全性
1.CSRF 保护。在form中添加一个cookie,当提交时候服务器会认证这个值,若相同表示为可信任的表单及其传的值
components中加入
‘request’=>array(
‘enableCsrfValidation’=>true,
),
且建立表单时候一定用CHtml::form。这种格式,其他格式都不能被保护

2.XSS 保护
<?php $this->beginWidget(‘CHtmlPurifier’); ?>
…display user-entered content here…
<?php $this->endWidget(); ?>
3.Cookie 保护
components中加入
‘request’=>array(
‘enableCookieValidation’=>true,
),
用时候这样调用和赋值
$cookie=Yii::app()->request->cookies[$name];
$value=$cookie->value;

// send a cookie
$cookie=new CHttpCookie($name,$value);
Yii::app()->request->cookies[$name]=$cookie;

8》http://www.yiiframework.com/doc/guide/zh_cn/topics.performance
提高性能
1.应用php的APC(Alternative PHP Cache)。参考http://www.php.net/manual/en/book.apc.php
return array(
‘components’=>array(
‘cache’=>array(‘class’=>’CDbCache’),
‘cache2’=>array(‘class’=>’CMemCache’),
),
);
然后通过Yii::app()->cache和Yii::app()->cache2来访问。
2.关闭YII_DEBUG 设置为false
3. Active Record用这个调用库文件也可以应用到缓存技术
4. 可以用$cs=Yii::app()->clientScript;来合并许多的js文件
5. 可以引用google的jquery来代替自身的echo CGoogleApi::bootstrap(); CGoogleApi::load

当用yii自带的BUTTON调用自己的JQuery.yii.js时候会与Jquery.validate.js冲突
1. 这样调用Button 就yii自己生成了 JQuery.yii.js,会产生冲突。文本框验证不了
<?php echo CHtml::Button(‘cancel’, array (
‘submit’ => Yii::app()->request->baseUrl . ‘/category/DeleteUser’,
‘params’ => ”,
‘confirm’ => ‘Are you sure?’
)) ?>

2. 解决:
需要避开带参数的button
<?php echo CHtml::Button(‘cancel’,array(“onclick”=>”deleteuser(‘”.Yii::app()->request->baseUrl . ‘/category/DeleteUser’.”‘)”));?>
让它去调用js函数deleteuser()且把相对路径传给他。让js去提交表单和询问

js如下:
function deleteuser(url)
{
if(confirm(‘are you sure?’))
{
document.getElementById(‘fillForm’).action=url;
document.getElementById(‘fillForm’).submit();
}
}

yii controller中需要load某些文件的操作方法
1. /protected/config/main.php 中 是纵览哪些文件是可以load进来的
// autoloading model and component classes
‘import’ => array(
‘application.models.*’,
‘application.components.*’,
‘application.classes.*’,
),

也可以在引用时直接调用:”import(‘application.models.modelName’)”。

2. controller之间的action不能相互调用且controller之间也不能相互引用
需要公共的函数可以写到这些文件中只要建立一个class就可以
解决方法在公共函数中进行回传一个变量或者全局变量,用变量进行判断


Technorati :



发表评论

您的电子邮箱地址不会被公开。

14 + = 16