法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. WPF - 这是一堆代码片段的集合

    1. Image的Source设定,引用的图片文件在其他的dll中.图片的Build action : Resource 如果是直接写: Source="/MyProject.Resourc ...

  2. WORLD OPERATS

        word文章设置无法复制 通常我们会采用设置密码的方式,规定某个文档的使用范围. 但这种方法是有一个局限,那就是可以观看文档的人未必靠谱,万一复制了文档的重要内容怎么办? 因此,不妨考虑加上禁 ...

  3. 使用单例模式实现自己的HttpClient工具类

    引子 在Android开发中我们经常会用到网络连接功能与服务器进行数据的交互,为此Android的SDK提供了Apache的HttpClient 来方便我们使用各种Http服务.你可以把HttpCli ...

  4. 4、第4次课 CSS代码第三节课20150923

    1.列表li样式及取值意义 list-style-type : disc | circle | square | decimal | lower-roman | upper-roman | lower ...

  5. DataGrid 使用模型列后实现点击列名称排序

    DataGrid 使用模型列后实现点击列名称排序 代码如下: <DataGridTemplateColumn Header="型 号" SortMemberPath=&quo ...

  6. css position 应用(absolute和relative用法)

    1.absolute(绝对定位) absolute是生成觉对定位的元素,脱离了文本流(即在文档中已经不占据位置),参照浏览器的左上角通过top,right,bottom,left(简称TRBL) 定位 ...

  7. spring源码分析

    编译问题 spring-4.0.5.release编译是用jdk8编译的,为啥可以运行在jdk7的环境? 源码分析 spring源码分析,由一个点各个击破,比如依赖注入,autowired. spri ...

  8. sharepoint2013小技巧

    一.创建基于经典认证的应用程序 New-SPWebApplication -Name "Contoso Internet Site" -ApplicationPool " ...

  9. GridView下DropDownList 的选择方法onselectedindexchanged 实现方法

    在GridView下面绑定好了下拉框,我们常常会遇到一个问题, 选择方法怎么实现呢,用js总是难的去算是在GridView的第几行第几个元素,因为服务器的id和客户端的id经常变化让js根本无从找起, ...

  10. MSSQL查询所有数据库表,指定数据库的字段、索引

    --查询所有数据库USE mastergoselect [name] from [sysdatabases] order by [name] --查询其中一个数据库test,就可以得到这个数据库中的所 ...