`

yii 常用一些调用 (增加中)

 
阅读更多
调用YII框架中 jquery:Yii::app()->clientScript->registerCoreScript('jquery');   
 
framework/web/js/source的js,其中registerCoreScript key调用的文件在framework/web/js/packages.php列表中可以查看

在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::app()->request->baseUrl

只输出一个连接(url)<?php echo $this->createUrl('admin/left_menu');?> //**.php?r=admin/left_menu

输出一组url(yii url 默认样式)

<?php $this->widget('zii.widgets.CMenu',array(
            'items'=>array(
                array('label'=>'主菜单', 'url'=>array('/admin/left_menu')),
                array('label'=>'内容发布', 'url'=>array('/admin/page')),
                array('label'=>'内容维护', 'url'=>array('/site/contact')),
                array('label'=>'系统主页', 'url'=>array('/site/login')),
                array('label'=>'网站主页', 'url'=>array('/site/logout')),
                array('label'=>'会员中心', 'url'=>array('/site/login')),
                array('label'=>'注销', 'url'=>array('/site/login')),
            ),
        )); ?>

//除域名外的URL
  Yii::app()->request->getUrl();
除域名外的首页地址
Yii::app()->user->returnUrl;
6、//除域名外的根目录地址
Yii::app()->homeUrl;


YII FRAMEWORK的COOKIE使用方法
设置cookie:
[php] view plaincopy
$cookie = new CHttpCookie('mycookie','this is my cookie'); 
$cookie->expire = time()+60*60*24*30;  //有限期30天 
Yii::app()->request->cookies['mycookie']=$cookie; 


读取cookie:
[html] view plaincopy
$cookie = Yii::app()->request->getCookies(); 
echo $cookie['mycookie']->value; 

销毁cookie:
[html] view plaincopy
$cookie = Yii::app()->request->getCookies(); 
unset($cookie[$name]); 

在控制器添加CSS文件或JAVASCRIPT文件
[php] view plaincopy
public function init() 
{     
    parent::init();     
    Yii::app()->clientScript->registerCssFile(Yii::app()->baseUrl.'/css/my.css'); 
    Yii::app()->clientScript->registerScriptFile(Yii::app()->baseUrl.'/css/my.js'); 


YII FRAMEWORK的用户验证与授权
yii提供了CUserIdentity类,这个类一般用于验证用户名和密码的类.继承后我们需要重写其中的authenticate()方法来实现我们自己的验证方法.具体代码如下:
[php] view plaincopy
class UserIdentity extends CUserIdentity 

    private $_id; 
    public function authenticate() 
    { 
        $record=User::model()->findByAttributes(array('username'=>$this->username)); 
        if($record===null) 
            $this->errorCode=self::ERROR_USERNAME_INVALID; 
        else if($record->password!==md5($this->password)) 
            $this->errorCode=self::ERROR_PASSWORD_INVALID; 
        else 
        { 
            $this->_id=$record->id; 
            $this->setState('title', $record->title); 
            $this->errorCode=self::ERROR_NONE; 
        } 
        return !$this->errorCode; 
    } 
    public function getId() 
    { 
        return $this->_id; 
    } 



在用户登陆时则调用如下代码:

// 使用提供的用户名和密码登录用户
[html] view plaincopy
$identity=new UserIdentity($username,$password); 
if($identity->authenticate()) 
    Yii::app()->user->login($identity); 
else 
    echo $identity->errorMessage; 


用户退出时,则调用如下代码:


[html] view plaincopy
// 注销当前用户 
Yii::app()->user->logout(); 

其中的user是yii的一个components.需要在protected/config/main.php中定义
[html] view plaincopy
'user'=>array( 
        // enable cookie-based authentication 
        'allowAutoLogin'=>true, 
        'loginUrl' => array('site/login'), 
), 


YII FRAMEWORK中TRASACTION事务的应用
[html] view plaincopy
$model=Post::model(); 
$transaction=$model->dbConnection->beginTransaction(); 
try 

    // find and save are two steps which may be intervened by another request 
    // we therefore use a transaction to ensure consistency and integrity 
    $post=$model->findByPk(10); 
    $post->title='new post title'; 
    $post->save(); 
    $transaction->commit(); 

catch(Exception $e) 

    $transaction->rollBack(); 


Yii Framework中截取字符串(UTF-8)的方法
Helper.php
[php] view plaincopy
class Helper extends CController 

        public static function truncate_utf8_string($string, $length, $etc = '...') 
        { 
            $result = ''; 
            $string = html_entity_decode(trim(strip_tags($string)), ENT_QUOTES, 'UTF-8'); 
            $strlen = strlen($string); 
            for ($i = 0; (($i < $strlen) && ($length > 0)); $i++) 
                { 
                if ($number = strpos(str_pad(decbin(ord(substr($string, $i, 1))), 8, '0', STR_PAD_LEFT), '0')) 
                        { 
                    if ($length < 1.0) 
                                { 
                        break; 
                    } 
                    $result .= substr($string, $i, $number); 
                    $length -= 1.0; 
                    $i += $number - 1; 
                } 
                        else 
                        { 
                    $result .= substr($string, $i, 1); 
                    $length -= 0.5; 
                } 
            } 
            $result = htmlspecialchars($result, ENT_QUOTES, 'UTF-8'); 
            if ($i < $strlen) 
                { 
                        $result .= $etc; 
            } 
            return $result; 
        } 


将Helper.php放进protected\components文件夹下。


使用方法:

Helper::truncate_utf8_string($content,20,false);   //不显示省略号
Helper::truncate_utf8_string($content,20);  //显示省略号


CBREADCRUMBS简介~俗称:面包屑
功能介绍:zii.widgets 下的CBreadcrumbs类,其继承关系: CBreadcrumbs » CWidget »
CBaseController » CComponent .源代码位置:
framework/zii/widgets/CBreadcrumbs.php
面包屑类显示一个链接列表以表明当前页面在整个网站中的位置.
由于面包屑通常会出现在网站的近乎所有的页面,此插件最好在视图的layout中进行部署.
你可以定义一个breadcrumbs属性并且在布局文件中指派给(网站)基础控制器插件,如下所示:
[html] view plaincopy
$this->widget('zii.widgets.CBreadcrumbs', array( 
    'links'=>$this->breadcrumbs, 
)); 
于是乎,你需要时,只需要在每个视图脚本中,指定breadcrumbs属性(就可以显示出网页导航了).
以上是官方提供的文档文件的介绍.
下面介绍视图文件中写法:

[html] view plaincopy
$this->breadcrumbs=array( 
      'Users'=>array('index'), 
      'Create', 
     // 形式 :  'key' =>'value'  key的位置相当于最后显示出来的a标签内的名字, value则相当于a标签的href属性. 
     // 'Create'表示当前页  故没有设置链接. 
); 

YII FRAMEWORK中验证码的使用
1.在controller中修改:
[html] view plaincopy
public function actions() 

        return array( 
        // captcha action renders the CAPTCHA image displayed on the contact page 
                'captcha'=>array( 
                'class'=>'CCaptchaAction', 
                'backColor'=>0xFFFFFF,  //背景颜色 
                'minLength'=>4,  //最短为4位 
                'maxLength'=>4,   //是长为4位 
                'transparent'=>true,  //显示为透明 
        ), 
        ); 


2.在view的form表单中添加如下代码:

[html] view plaincopy
<?php if(CCaptcha::checkRequirements()): ?> 
<div class="row"> 
    <?php echo $form->labelEx($model,'verifyCode'); ?> 
    <div> 
    <?php $this->widget('CCaptcha'); ?> 
    <?php echo $form->textField($model,'verifyCode'); ?> 
    </div> 
    <div class="hint">Please enter the letters as they are shown in the image above. 
    <br/>Letters are not case-sensitive.</div> 
    <?php echo $form->error($model,'verifyCode'); ?> 
</div> 
<?php endif; ?> 


YII FRAMEWORK的CHTML::LINK支持锚点
CHtml::link('链接文字',array('article/view','id'=>'3','#'=>'锚名称');
CUrlManager的 createUrl,是可以支持 '#' 的!

$params = array('userid' => 100, '#' => '锚名称');
$this->createUrl($route, $params);

YII FRAMEWORK在WEB页面查看SQL语句配置
[html] view plaincopy
'components'=>array( 
        'errorHandler'=>array( 
        // use 'site/error' action to display errors 
                'errorAction'=>'site/error', 
                ), 
        'log'=>array( 
                'class'=>'CLogRouter', 
                'routes'=>array( 
                        array( 
                                'class'=>'CFileLogRoute', 
                                'levels'=>'error, warning', 
                        ), 
                        // 下面显示页面日志 
                        array( 
                                'class'=>'CWebLogRoute', 
                                'levels'=>'trace',     //级别为trace 
                                'categories'=>'system.db.*' //只显示关于数据库信息,包括数据库连接,数据库执行语句 
                        ), 
                ), 
        ), 
), 


YII FRAMEWORK打印AR结果

[html] view plaincopy
$user = 模型->model()->findAll(); 
foreach($user $v) { 
    var_dump($v->attributes); 



yii 数据save后得到插入id

$post->save();
//得到上次插入的Insert id
$id = $post->attributes['id'];
如此很简单

yii获取ip地址
Yii::app()->request->userHostAddress;


yii execute后获取insert id
$id = Yii::app()->db->getLastInsertID();
yii获取get,post过来的数据
Yii::app()->request->getParam('id');

yii如何设置时区
可以在config/main.php 里'timeZone'=>'Asia/Chongqing',设定时区.
yii如何将表单验证提示弄成中文的
将main.php里的app配置加上language=>'zh_cn',系统默认的提示就是中文的了,要自定义消息就像楼上说的定义message
yii如何获得上一页的url以返回
Yii::app()->request->urlReferrer;
yii多对多关联条件
[html] view plaincopy
$criteria->addInCondition('categorys.id',$in); 
$criteria->addSearchCondition('Shop.name',$keyword);$shops=Shop::model()->with(array('categorys'=>array('together'=>true)))->findAll($criteria); 
同时要在Shop模型中加入alias='categorys' ,另外together=true放在模型的关联中也可

yii如何防止重复提交?
提交后Ccontroler->refresh();
yii过滤不良代码
[html] view plaincopy
$purifier=new CHtmlPurifier; 
$purifier->options=array('HTML.Allowed'=>'div'); 
$content=$purifier->purify($content); 
或者
[html] view plaincopy
<?php $this->beginWidget('CHtmlPurifier'); ?> 
...display user-entered content here... 
<?php $this->endWidget(); ?> 

显示yii的sql语句查询条数和时间
在config/main.php中配置在log组件的routes中加入
[html] view plaincopy
array( 
'class'=>'CProfileLogRoute', 
'levels'=>'error, warning', 

同时在db组件中加入'enableProfiling'=>true,同时在这种情况下,可以用CDbConnection::getStats() 查看执行了多少个语句,用了多少时间print_r(CDbConnection::getStats());

Yii多数据库操作
大多数情况下,我们都会采用同一类型的数据库,只是为了缓解压力分成主从或分布式形式而已。声明你可以在app config里声明其它的数据库连接:
<?php
    ......
    'components'=>array(
        'db'=>....// 主链接
         'db1'=>...// 从连接1
        'db2'=>...// 从连接2
    )
    ......操作在代码里,可以通过Yii::app()->db1和Yii::app()->db2获得两个从连接。高级操作更高级(自动)的主从数据库功能将在1.1实现。

分享到:
评论

相关推荐

    Yii框架文档(2010.7.18)

    在Yii框架中,开发流程涉及使用表单、创建模型和动作、收集表格输入,以及可能使用FORMBUILDER工具。此外,应用开发涉及数据库的访问和操作,包括使用数据访问对象(DAO)和Active Record。 ### 使用表单 Yii提供了...

    Yii中文手册

    - **版本1.0.7**:在跟踪信息中支持显示调用栈。 - **版本1.0.6**:在update和delete方法中使用命名空间的支持。 - **版本1.0.5**:通过支持命名空间增强了ActiveRecord的功能。 ##### Yii是什么 - **概述**:...

    Yii2框架实现数据库常用操作总结

    Yii2框架还提供了where()方法的链式调用,使得开发者能够更方便地添加多条件查询,如: ```php $user = User::find()-&gt;where(['name' =&gt; 'ttt'])-&gt;andWhere(['age' =&gt; 18])-&gt;all(); ``` 以上总结的知识点涵盖了Yii...

    Yii框架应用组件用法实例分析

    应用组件是Yii框架中的一个重要概念,它是封装好的服务对象,可以被应用中的任何地方调用以完成特定功能。 在Yii框架中,所有的应用组件都被注册在一个全局的服务定位器中,通常使用\Yii::$app来访问。每个组件都...

    YII CLinkPager分页类扩展增加显示共多少页

    在Yii框架中,CLinkPager是用于实现分页功能的一个常用组件。然而,它默认情况下并不显示总页数。在某些场景下,显示总页数可能是用户界面的一个重要需求,以便用户了解数据的完整分布。要解决这个问题,我们可以对...

    PHP yii实现model添加默认值的方法(两种方法)

    Yii框架提供了多种方式来实现这一功能,这里将介绍两种常用的方法:在`rules()`方法和`beforeSave()`方法中设定。 1. **在`rules()`方法中设定默认值** `rules()`方法是Yii中用于定义模型验证规则的地方,但也...

    Yii2框架可逆加密简单实现方法

    盐值的存在使得即使相同的明文在不同的系统中加密后也会得到不同的密文,增加了破解的难度。 3. **调用加密方法**:使用 `Yii::$app-&gt;getSecurity()-&gt;encryptByPassword($data, $secretKey);` 对数据进行加密。这个...

    Yii框架实现对数据库的CURD操作示例

    在Yii框架中,对数据库的操作主要通过Active Record模式实现,这是Yii框架中最常用且功能强大的数据访问方式。Active Record模式通过为数据库表创建对应的模型类(Model),使得开发者可以以面向对象的方式来操作...

    后台管理系统

    描述中提到的"template"是指后台管理系统的基础框架或者模版,这通常包括了基本的页面结构、样式设计、常用功能模块等,开发者可以根据实际需求进行修改和扩展。"后台自己写一写就可以了"意味着开发者需要根据业务...

    PHP新版微信上墙微现场婚庆会议大屏幕互动抽奖系统源码

    1. **微信接口集成**:系统的核心部分是通过调用微信的开放接口,如OAuth2.0授权协议,获取用户的微信信息。用户在活动现场扫描二维码登录,通过微信账号身份验证,实现用户与系统的无缝连接。 2. **上墙功能**:...

    api

    同时,为了适应未来的需求变化,API应具备良好的扩展性,允许在不破坏现有接口的情况下增加新功能。安全性则确保数据在传输过程中的保护,防止未授权的访问和操作。 在PHP中,常见的API类型有: 1. **内置API**:...

    京东 PHP工程师面试题和答案.doc

    - **选项 A**: 结构型模式允许在不破坏类封装性的基础上增加新的功能。 - **选项 B**: 错误。结构型模式主要用于创建一组对象之间的关系,而不是创建一组对象本身。 - **选项 C**: 结构型模式可以为一组类创建...

    mvc-php

    Hack是在PHP基础上扩展的一种类型安全的语言,它在保留PHP灵活性的同时,增加了静态类型检查和一些现代化的编程特性,如类型声明、异步编程等。在PHP MVC框架中,使用Hack可以进一步提升代码质量,减少运行时错误。 ...

    杂项

    下面将对PHP的一些核心概念、特性以及常用功能进行详细阐述。 首先,PHP全称为“PHP:Hypertext Preprocessor”,它是一种服务器端的脚本语言,能够嵌入到HTML中,为网页增加动态内容。PHP的优势在于其简洁的语法、...

Global site tag (gtag.js) - Google Analytics