YII--路径相关小技巧
来源:互联网 发布:手机自动解锁软件 编辑:程序博客网 时间:2024/05/17 01:30
YII知识小结:
1.YII默认控制器为 SiteController 默认控制器可以通过配置文件application/config/main.php修改,指定 defaultController即可, 如'defaultController' => 'home',
2.控制器的默认方法为actionIndex 可以通过定义控制器属性 defaultAction来设置,如 public$defaultAction = 'lists';
3.获取Controller ID Yii::app()->getController()->id 获取ActionID Yii::app()->getController()->getAction()->id类:system.web.CWebApplication
4.获取POST参数 Yii::app()->request->getPost('name'); 获取GET参数Yii::app()->request->getQuery('name');
5.判断提交方式 Yii::app()->request->isPostRequestYii::app()->request->isAjaxRequest类:system.web.CHttpRequest
6.view中导入js、css、Meta 类:system.web.CClientScript
//导入CSSYii::app ()->clientScript->registerCssFile ( Yii::app()->baseUrl.'/uploadify.css', CClientScript::POS_HEAD );//导入YII集成JQUERYYii::app ()->clientScript->registerCoreScript ( 'jquery' );//导入外部JSYii::app ()->clientScript->registerScriptFile ( Yii::app()->baseUrl.'/jquery.uploadify.min.js', CClientScript::POS_HEAD );//Meta信息Yii::app()->clientScript->registerMetaTag('关键字','keywords');Yii::app()->clientScript->registerMetaTag('些描述','description');Yii::app()->clientScript->registerMetaTag('作者','author');Yii::app()->clientScript->registerMetaTag(' text/html;charset=utf-8', null, 'Content-Type');
7.生成URL可以使用 Yii::app()->createUrl('post/read', array('id'=> 1))
8.main.php引用其他配置文件可用'params'=>require(dirname(__FILE__).'/params.php'),params.php直接返回数组即可,如returnarray();访问方式则为Yii::app()->params['paramName']
9.数据在保存、查找、验证前后调用before、afeter方法,如:beforeSave、afterSave、beforeValidate
protected function beforeSave() { if(parent::beforeSave()) { if($this->isNewRecord) { $this->create_time = date("Y-m-d H:i:s"); } else { $this->update_time = date("Y-m-d H:i:s"); } return true; } else { return false; }}
10.表单验证时可以指定应用场景,如$model = new Post('create')或者通过$post->scenario = 'create' 指定
11.获取http://127.0.0.1/test/index?var=val的内容:
Yii::app()->request->getUrl /test/index?var=valYii::app()->request->getHostInfo http://127.0.0.1Yii::app()->request->getPathInfo test/indexYii::app()->request->getRequestUri /test/index?var=valYii::app()->request->getQueryStringvar=val
12.判断是否为AJAX动作:
Yii::app()->request->isAjaxRequest
13.GET,POST,REQUEST
Yii::app()->request->getParam('id');//requestYii::app()->request->getQuery('id');//getYii::app()->request->getPost('id');//post
AR:
数据库配置:
'db'=>array( //'class'=>'system.db.CDbConnection', 'connectionString' => 'mysql:host=localhost;dbname=yii', 'emulatePrepare' => true, 'username' => 'root', 'password' => '', 'charset' => 'utf8', //默认false,设置为true即开启记录绑定参数,但是性能代价比较高 'enableParamLogging' => 'true', // 开启表结构缓存(schema caching)提高性能 // 'schemaCachingDuration'=>3600, ),
创建记录:
$post=new Post;$post->title='sample post';$post->content='content for the sample post';$post->create_time=time();$post->save();
也可以直接POST给属性:
$model->attributes=$_POST['Post'];$model->save();
读取记录:
// 查找满足指定条件的结果中的第一行$post=Post::model()->find($condition,$params);// 查找具有指定主键值的那一行$post=Post::model()->findByPk($postID,$condition,$params);// 查找具有指定属性值的行$post=Post::model()->findByAttributes($attributes,$condition,$params);// 通过指定的 SQL 语句查找结果中的第一行$post=Post::model()->findBySql($sql,$params);
如上所示,我们通过 Post::model() 调用 find 方法。 请记住,静态方法 model() 是每个 AR类所必须的。 此方法返回在对象上下文中的一个用于访问类级别方法(类似于静态类方法的东西)的 AR 实例。
如果 find 方法找到了一个满足查询条件的行,它将返回一个 Post 实例,实例的属性含有数据表行中相应列的值。然后我们就可以像读取普通对象的属性那样读取载入的值,例如 echo $post->title;。
如果使用给定的查询条件在数据库中没有找到任何东西, find 方法将返回 null 。
调用 find 时,我们使用 $condition 和 $params 指定查询条件。此处 $condition 可以是 SQL语句中的 WHERE 字符串,$params 则是一个参数数组,其中的值应绑定到 $condation 中的占位符。例如:
$post = Post::model()->find('id=:id',array(':id'=>1));
CDbCriteria:用$criteria实例作为find()的查询条件
$criteria=new CDbCriteria;$criteria->select='title'; // 只选择 'title' 列$criteria->condition='postID=:postID';$criteria->params=array(':postID'=>10);$post=Post::model()->find($criteria); // $params 不需要了
改写:用数组直接取代$criteria,数组的键和值各自对应标准(criterion)的属性名和值
$post=Post::model()->find(array( 'select'=>'title', 'condition'=>'postID=:postID', 'params'=>array(':postID'=>10),));
计数:
// 获取满足指定条件的行数$n=Post::model()->count($condition,$params);// 通过指定的 SQL 获取结果行数$n=Post::model()->countBySql($sql,$params);// 检查是否至少有一行复合指定的条件$exists=Post::model()->exists($condition,$params);
更新记录:
// 更新符合指定条件的行Post::model()->updateAll($attributes,$condition,$params);// 更新符合指定条件和主键的行Post::model()->updateByPk($pk,$attributes,$condition,$params);// 更新满足指定条件的行的计数列Post::model()->updateCounters($counters,$condition,$params);
例如:
Post::model()->updateAll(array('title'=>'hello'),'id=1');
删除记录:
// 删除符合指定条件的行Post::model()->deleteAll($condition,$params);// 删除符合指定条件和主键的行Post::model()->deleteByPk($pk,$condition,$params);
例如:
Post::model()->deleteAll('id=:id',array(':id'=>6));
数据验证:
if($post->save()){ // 数据有效且成功插入/更新}else{ // 数据无效,调用 getErrors() 提取错误信息}
将表单提交过来的数据赋值给AR属性:
$post->title=$_POST['title'];$post->content=$_POST['content'];$post->save();
简化:
// 假设 $_POST['Post'] 是一个以列名索引列值为值的数组$post->attributes=$_POST['Post'];$post->save();
使用 AR 处理事务
每个 AR 实例都含有一个属性名叫 dbConnection ,是一个 CDbConnection 的实例,这样我们可以在需要时配合AR 使用由 Yii DAO 提供的 事务 功能:
$model=Post::model();$transaction=$model->dbConnection->beginTransaction();try{ // 查找和保存是可能由另一个请求干预的两个步骤 // 这样我们使用一个事务以确保其一致性和完整性 $post=$model->findByPk(10); $post->title='new post title'; $post->save(); $transaction->commit();}catch(Exception $e){ $transaction->rollBack();}
命名范围(named scope) 表示一个命名的查询规则,它可以和其他命名范围联合使用并应用于 Active Record查询。
用法:命名范围主要是在 CActiveRecord::scopes() 方法中以名字-规则对的方式声明。 如下代码在 Post模型类中声明了两个命名范围, published 和 recently。
class Post extends CActiveRecord{ ...... public function scopes() { return array( 'published'=>array( 'condition'=>'status=1', ), 'recently'=>array( 'order'=>'create_time DESC', 'limit'=>5, ), ); }}
例子:查找最近发布的5篇帖子
$posts=Post::model()->published()->recently()->findAll();
***总体来说,(1)命名范围必须出现在一个 find 方法调用的左边。
在视图层(../views/..)添加CSS文件或JavaScript文件
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl ."/js/TableView.js"); Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . "/js/datechooser.js");
批注1:在视图层引用与在控制层引用的方式一样。但在视图层中引用加载的要晚一些。
批注2:引用路径是使用baseUrl,而不是basePath。
批注3:关于参数CClientScript::POS_END,作用是延时加载,提高页面渲染效率。例如:
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl. "/js/jqueryui/jquery-ui.min.js", CClientScript::POS_END);
引入jquery核心部件:
Yii::app()->clientScript->registerCoreScript('jquery');
批注:不论在页面中的何种位置引用,最终yii会将jquery.js文件放入yii的assets文件夹下。即/projectName/assets/82qg58/jquery-1.6.1.min.js。
一、在../layouts/main.php中引入
1,直接引入
2,yii方式引入
Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl . "/js/jqueryui/jquery-ui.min.js", CClientScript::POS_END);if($this->user->id) { Yii::app()->clientScript->registerScriptFile(Yii::app()->createUrl('/account/info', array('format' => 'js')), CClientScript::POS_END);}if($this->user->id) { Yii::app()->clientScript->registerScriptFile(Yii::app()->createUrl('site/baseJs'));}?>
插入meta信息:
Yii::app()->clientScript->registerMetaTag('keywords','关键字');Yii::app()->clientScript->registerMetaTag('description','一些描述');Yii::app()->clientScript->registerMetaTag('author','作者');
获取网站路径等小元素
在view中得到当前controller的ID方法:Yii::app()->getController()->id;
在view中得到当前action的ID方法:Yii::app()->getController()->getAction()->id;
yii获取ip地址 :Yii::app()->request->userHostAddress;
yii判断提交方式 :Yii::app()->request->isPostRequest
得到当前域名: Yii::app()->request->hostInfo
得到proteced目录的物理路径 :YII::app()->basePath;
获得上一页的url以返回 :Yii::app()->request->urlReferrer;
得到当前url :Yii::app()->request->url;
得到当前home url :Yii::app()->homeUrl
得到当前return url :Yii::app()->user->returnUrl
项目路径 :dirname(Yii::app()->BasePath)
Yii::getPathOfAlias('webroot')
如:
'aliases'=>array(
'local'=>'path/to/local/'
),
获取布局文件:$this->getLayoutFile('main');
- YII--路径相关小技巧
- Yii小技巧积累
- YII常用小技巧-不断更新
- MySQL相关小技巧
- Yii 路径
- yii路径
- Yii路径
- Yii 路径
- tchar相关的小技巧
- shell相关一些小技巧
- Android定制相关小技巧
- 相关linux脚本小技巧
- yii 技巧
- yii 技巧
- Yii 技巧
- Yii框架实现上的2个小技巧
- 脚本中文件路径优化小技巧
- VC使用及调试相关小技巧
- Evolution Measurement 3-4
- PHP VC9、VC6、Thread S…
- HDU 4609 3-idiots(组合数学+FFT)
- php.ini配置项[APC]段详解
- 中华人民共和国民族表
- YII--路径相关小技巧
- Linux下配置APC提高性能 及安…
- php、java、android、ios通用的3de…
- 使用PHP内置的DES算法函数实现数据…
- 实现PHP多线程异步请求的3种方法
- mysql存储过程是使用--变量传参动…
- web性能测试工具-http_load
- Linux下四款Web服务器压力测试工具…
- 开发思路:php中不使用临时变量来…