法1:

在使用Yii开发中我们经常会遇到一个问题,每次使用Yii的组件、扩展等,我们会像下面一样去写:

<?php
Yii::app()->user;
Yii::app()->getClientScript();
Yii::app()->params['name'];
...

这使我们用起来很不方便,我在 yiiFramework 上看到了一篇解决这个问题的 Wiki Use shortcut functions to reduce typing, 因为上面的英文很简单就不去翻译了,这里我只说明一下用法,创建全局文件 globals.php 把快捷函数放到这个全局文件里面。全局文件放到 protected 文件夹下面,然后在入口文件 `index.php' 引入

required('path/to/globals.php');

我推荐的是在配置文件 main.php' 里面引入,为了使console应用也能使用,配置文件console.php` 可修改为

return CMap::mergeArray(require('main.php'), array(
// console 的配置
...
));

下面是官网上的一些快捷函数和我自己常用到的一些:

<?php
/**
* This is the shortcut to DIRECTORY_SEPARATOR
*/
defined('DS') or define('DS', DIRECTORY_SEPARATOR); /**
* This is the shortcut to Yii::app()
*
* @return CWebApplication
*/
function app() {
return Yii::app();
} /**
* This is the shortcut to Yii::app()->clientScript
*
* @return CClientScript
*/
function cs() {
return Yii::app()->getClientScript();
} /**
* This is the shortcut to Yii::app()->user.
*
* @return CWebUser
*/
function user() {
return Yii::app()->getUser();
} /**
* this is the shortcut to Yii::app()->createUrl().
*
* @param string $route
* @param array $params
* @param string $ampersand
* @return string
*/
function url($route, $params = array(), $ampersand = '&') {
return Yii::app()->createUrl($route, $params, $ampersand);
} /**
* This is the shortcut to CHtml::encode
*
* @param string $text
* @return string
*/
function h($text) {
return htmlspecialchars($text, ENT_QUOTES, Yii::app()->charset);
} /**
* This is the shortcut to CHtml::link().
*
* @param string $text
* @param string|array $url
* @param array $htmlOptions
* @return string
*/
function l($text, $url = '#', $htmlOptions = array()) {
return CHtml::link($text, $url, $htmlOptions);
} /**
* This is the shortcut to Yii::t() with default category = 'stay'
*
* @param string $message
* @param string $category
* @param array $params
* @param string $source
* @param string $language
* @return string
*/
function t($message, $category = 'stay', $params = array(), $source = null, $language = null) {
return Yii::t($category, $message, $params, $source, $language);
} /**
* This is the shortcut to Yii::app()->request->baseUrl
* If the parameter is given, it will be returned and prefixed with the app baseUrl.
*
* @param string $url
* @return string
*/
function bu($url = null) {
static $baseUrl;
if ($baseUrl === null)
$baseUrl = Yii::app()->getRequest()->getBaseUrl();
return $url === null ? $baseUrl : $baseUrl . '/' . ltrim($url, '/');
} /**
* Returns the named application parameter.
* This is the shortcut to Yii::app()->params[$name].
*
* @param string $name
* @return mixed
*/
function param($name) {
return Yii::app()->params[$name];
} // 下面是我用到的 /**
* 格式化函数,这是 Yii::app()->format 的快捷函数,使用方法
*
* <pre>
* format($timestamp,'Datetime');
* </pre>
*
* @param mixed $value
* @param string $type 格式化的类型,如 'datetime', 'time'.., 详见 CFormatter
* @return mixed
*/
function format($value, $type) {
return Yii::app()->format->format($value, $type);
} /**
* 这是加载模型的函数,如果没有找到模型则会抛出 404 错误
*
* @param string $modelName
* @param integer $pk
* @param string $errorMsg
* @return CActiveRecord
*/
function load_model($modelName, $pk, $errorMsg = null) {
$model = $modelName::model()->findByPk((int)$pk);
if ($model != null) {
return $model;
} else {
throw new CHttpException(404, $errorMsg);
}
}

源码下载: 点击下载

我们还可以根据项目的具体需求添加

转自:http://www.yiiwiki.com/45/

法2:

是使用YII的类库

在protected\components下建立一个tool.php的静态类

代码如下

<?php
class Tool {
public static function mkpath($path) {
$dirs = array();
$path = preg_replace('/(\/){2,}|(\\\){1,}/', '/', $path);
$dirs = explode("/", $path);
$path = "";
foreach ($dirs as $element) {
$path.=$element . "/";
if (!is_dir($path)) {
if (!mkdir($path, 0777)) {
return false;
} else {
chmod($path, 0777);
}
}
}
return true;
}
public static function test() {
echo('tetts');
}
}

然后控制器里面直接使用Tool::mkpath(xx/xx);

第一种方法最大的不好就是可能会出现冲突.

YII增加全局函数的更多相关文章

  1. 详解如何在Laravel中增加自定义全局函数

    http://www.php.cn/php-weizijiaocheng-383928.html 如何在Laravel中增加自定义全局函数?在我们的应用里经常会有一些全局都可能会用的函数,我们应该怎么 ...

  2. CI框架源代码阅读笔记3 全局函数Common.php

    从本篇開始.将深入CI框架的内部.一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说.全局函数具有最高的载入优先权.因此大多数的框架中BootStrap ...

  3. Flask jinja2 全局函数,宏

    内置全局函数 dict()函数,方便生成字典型变量 {% set user = dict(name='Mike',age=15) %} <p>{{ user | tojson | safe ...

  4. golang写业务代码,用全局函数还是成员函数

    在golang中,函数划分为全局函数和成员函数,在使用的时候,有种情况,会产生一些疑惑的,就是在写业务代码的时候,使用全局函数好像会比较方便,一般业务代码,都不会复用,都是针对特定的业务进行编程,要复 ...

  5. YII2中如何自定义全局函数

    有些时候我们需要自定义一些全局函数来完成我们的工作. 方法一: 直接写在入口文件处 <?php // comment out the following two lines when deplo ...

  6. yii---定义全局函数

    YII它不像Thinkphp等框架一样,已经有全局函数,YII要使用全局函数需要自己去定义,然后在入口文件中进行引入: 例如:我们看 yii 的入口文件: 看到这里,我们看到有个 autoload.p ...

  7. laravel 创建自定义全局函数

    全局函数的实现是依靠在初始化的时候,将helps.php或者functions.php直接进行了加载.而Laravel中bootstrap/autoload.php(laravel 5.5 貌似没有这 ...

  8. 教你在 Yii2 中添加全局函数

    方法一 这种方法就是直接在入口文件web/index.php里面写函数,示例代码如下: // something code …… // 全局函数 function pr($var) { $templa ...

  9. CI框架源码阅读笔记3 全局函数Common.php

    从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap ...

随机推荐

  1. Jenkins用户组管理

    Jenkins用户组管理 转载2015-06-10 21:44:24 标签:jenkinsrolestrategypluginusergroupcitools 一.安装插件 安装RoleStrateg ...

  2. Web 前端 —— javaScript

    目录: 资源链接 基础知识 基础问题集 资源链接: http://www.w3school.com.cn/ 弹出窗口,变暗特效:http://www.csrcode.cn/article-584-1. ...

  3. jQuery on()绑定动态元素出现的问题小结

    jQuery on()方法是官方推荐的绑定事件的一个方法.使用 on() 方法可以给将来动态创建的动态元素绑定指定的事件,通过本文给大家介绍jQuery on()绑定动态元素出现的问题小结,需要的朋友 ...

  4. js给页面加style

    今天做项目时遇到一个问题,我的a.jsp引入了b.jsp,c.jsp也引入了b.jsp,而b.jsp里面的style是根据引入的不同动态改变的(在a.jsp.c.jsp中写js改变).网上找了好多代码 ...

  5. HDU H204 阿牛的EOF牛肉串

    阿牛的EOF牛肉串 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  6. AIX Study之--AIX网卡配置管理(ent0、en0、et0)

    AIX Study之--AIX网卡配置管理(ent0.en0.et0) 1.查看AIX系统网卡信息: [root@aix211 /]#lsdev |grep et  en0 Available 1L- ...

  7. linux下清理系统垃圾

    可以使用以下命令清理系统垃圾sudo apt-get autoclean 清理旧版本的软件缓存sudo apt-get clean 清理所有软件缓存sudo apt-get autoremove 删除 ...

  8. Spring AOP 实现原理与 CGLIB 应用--转

    AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理.安全检查.缓存.对象池管理等.AOP 实现的关键就在于 ...

  9. jquery实现图片切换和js实现图片切换

    jquery实现图片切换: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...

  10. linux常见设备类型及文件系统

    As you can see in  Table   14.3   , all disk device names end with the letter a. That is because it ...