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 ...
随机推荐
- Python学习笔记2-flask-sqlalchemy 简单笔记
flask-sqlalchemy 简单笔记 字数 阅读 评论 喜欢 flask-sqlalchemy SQLAlchemy已经成为了python世界里面orm的标准,flask是一个轻巧的web框架, ...
- Android实现后台长期监听时间变化
1.首先我们的目的是长期监听时间变化,事实上应用程序退出. 通过了解我们知道注冊ACTION_TIME_TICK广播接收器能够监听系统事件改变,可是 查看SDK发现ACTION_TIME_TICK广播 ...
- 告别LVS:使用keepalived+nginx实现负载均衡代理多个https
需求1:CDN小节点使用尽可能少的资源实现高可用和负载均衡需求2:需要支持10多个HTTPS站点的反向代理后端环境:nginx在前端做url_hash,后端缓存服务器使用squid和lighttpd分 ...
- [转] 为什么医疗咨询服务公司Evolent Health仅用4年就华丽上市?
让医疗主体,即医院和医生担任保险角色,完全控制保费,实现医疗机构的利益最大化.美国公司EvolentHealth帮助所有医院实现这一梦想. 不觉间,已步入2015的下半年.当国内还在讨论商业保险何时能 ...
- 面试题 HashMap 数据结构 实现原理
数据结构 HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端. 数组:数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O ...
- IIS配置
IIS配置文档: 1.安装IIS.控制面板→程序→打开关闭Windows功能,Web管理服务和万维网服务都勾上. 2.部署网站:ASP.Net项目的发布:项目中点右键“发布”,选择“文件系统”,发布到 ...
- easyui-tree绑定数据的几种方式
没想到easyui对json数据格式要求的那么严谨,折腾了半天 第一种直接使用标签方式,很容易就加载出来了: <ul class="easyui-tree"> < ...
- 阿里云linux的nginx下面配置多站点
假设有服务器ip为 114.214.85.35 域名1为 www.jieshendada.cn 域名2为 www.jieshenxiaoxiao.cn 1.首先打开nginx域名配置文件存放目录:/ ...
- PL/SQL中文显示都显示成“?”的问题
PL/SQL中文显示都显示成“?”的问题 首先我在sqlplus里面查询到的中文是正常的,然后再oracle里面的注册表里面看得nls_lang是SIMPLIFIED CHINESE_CHINA.Z ...
- Eclipse自动提示功能
一般默认情况下,Eclipse的代码提示功能是比MicrosoftVisualStudio的差很多的,主要是Eclipse本身有很多选项是默认关闭的,要开发者自己去手动配置.如果开发者不清楚的话,就不 ...