YII增加全局函数
法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);
}
}
源码下载: 点击下载
我们还可以根据项目的具体需求添加
法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增加全局函数的更多相关文章
- 详解如何在Laravel中增加自定义全局函数
http://www.php.cn/php-weizijiaocheng-383928.html 如何在Laravel中增加自定义全局函数?在我们的应用里经常会有一些全局都可能会用的函数,我们应该怎么 ...
- CI框架源代码阅读笔记3 全局函数Common.php
从本篇開始.将深入CI框架的内部.一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说.全局函数具有最高的载入优先权.因此大多数的框架中BootStrap ...
- Flask jinja2 全局函数,宏
内置全局函数 dict()函数,方便生成字典型变量 {% set user = dict(name='Mike',age=15) %} <p>{{ user | tojson | safe ...
- golang写业务代码,用全局函数还是成员函数
在golang中,函数划分为全局函数和成员函数,在使用的时候,有种情况,会产生一些疑惑的,就是在写业务代码的时候,使用全局函数好像会比较方便,一般业务代码,都不会复用,都是针对特定的业务进行编程,要复 ...
- YII2中如何自定义全局函数
有些时候我们需要自定义一些全局函数来完成我们的工作. 方法一: 直接写在入口文件处 <?php // comment out the following two lines when deplo ...
- yii---定义全局函数
YII它不像Thinkphp等框架一样,已经有全局函数,YII要使用全局函数需要自己去定义,然后在入口文件中进行引入: 例如:我们看 yii 的入口文件: 看到这里,我们看到有个 autoload.p ...
- laravel 创建自定义全局函数
全局函数的实现是依靠在初始化的时候,将helps.php或者functions.php直接进行了加载.而Laravel中bootstrap/autoload.php(laravel 5.5 貌似没有这 ...
- 教你在 Yii2 中添加全局函数
方法一 这种方法就是直接在入口文件web/index.php里面写函数,示例代码如下: // something code …… // 全局函数 function pr($var) { $templa ...
- CI框架源码阅读笔记3 全局函数Common.php
从本篇开始,将深入CI框架的内部,一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说,全局函数具有最高的加载优先权,因此大多数的框架中BootStrap ...
随机推荐
- php几个不起眼儿的小技巧
说是不起眼儿的小技巧,其实应该说是不常用的常规应用吧.很多事情就是这样,知道是一马事儿,会用是一马事儿,精习又是另外一马事儿.而成为高手更是需要扎实的基本功. str_repeat 重复输出字符串就靠 ...
- Clipboard.js : 移动端浏览器实现网页内容复制
.bl { padding: 5px 10px; border-left: 3px solid #009a61; background: #f6f6f6; color: #555; font-size ...
- ASP.NET MVC框架开发系列课程 (webcast视频下载)
课程讲师: 赵劼 MSDN特邀讲师 赵劼(网名“老赵”.英文名“Jeffrey Zhao”,技术博客为http://jeffreyzhao.cnblogs.com),微软最有价值专家(ASP.NET ...
- 深入理解javascript之this
javascript中的this含义很丰富,它能够是全局对象,当前对象或者是随意对象,这都取决于函数的调用方式.函数有下面几种调用方式:作为对象方法调用.作为函数调用.作为构造函数调用.apply或c ...
- 使用MySQL的LAST_INSERT_ID--转
LAST_INSERT_ID 自动返回最后一个 INSERT 或 UPDATE 操作为 AUTO_INCREMENT 列设置的第一个发生的值. 参考这里 The ID that was generat ...
- Java设计模式---装饰模式
装饰模式又名包装(Wrapper)模式.装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案. 装饰模式的结构 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任.换言之,客户 ...
- linux 网络状态工具ss命令
ss命令用于显示socket状态. 他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix dom ...
- 美洽SDK
简介 GitHub地址:https://github.com/Meiqia/MeiqiaSDK-Android 开发文档:http://meiqia.com/docs/meiqia-android-s ...
- 各种乱码,编码问题设置方法整理(UTF-8)
一.tomcat中文乱码问题 打开tomcat安装目录,在conf文件夹中找到server.xml文件 ,找到 <Connector port="8009" protoc ...
- C# string.format转义大括号--转
转义大括号 左大括号和右大括号被解释为格式项的开始和结束.因此,必须使用转义序列显示文本左大括号或右大括号.在固定文本中指定两个左大括号 ("{{") 以显示一个左大括号 (&qu ...