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 ...
随机推荐
- 自然语言.例如:求n!。
(1).定义3个变量i.n及mul,并为i和mul均赋初值为1. (2).从键盘中输入一个数赋给n. (3).将mul乘以i的结果赋给mul. (4)i的值加1,判断i的值是否大于n.如果大于n,则执 ...
- ActionScript通用开发框架
ActionScript 3(简称as)自2006年诞生以来,出现了一大批很优秀框架.就我的知识领域,运用包括pureMVC.pushButton Engine(组件框架).Robotlegs.Ash ...
- 更改Zend Studio/Eclipse代码风格主题
最近决定把几个IDE的代码样式统一一下,Visual Studio的还算好改,PHP目前用得不多,不过也打算给Zend Studio换身新装. 网上搜索的一些更改Zend Studio主题的多是修改或 ...
- apache 配置https(转)
主要讲述在windows下apache配置SSL以实现http转换为https SSL: SSl是为Http传输提供安全的协议,通过证书认证来确保客户端和网站服务器之间的数据是安全.也就是说在SSL下 ...
- linux vim 个性化设置(.vimrc)
set sw=4 set ts=4 set et set smarttab set smartindent set lbr set fo+=mB set sm set ...
- Linux控制台下的快捷键
Linux控制台(文本模式)下提高工作效率的快捷键 在Linux环境里,有一些按键有特殊的含意.# Ctrl-U: 擦除一行光标前面的部分.# Ctrl-H: 擦除光标前面的一个字符.# Ctrl-D ...
- android常用http框架介绍
测试数据 1.HttpURLConnection:在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择.而在Android 2.3版本及以后,HttpURLC ...
- Windows Media Player Plus
Windows Media Player Plus 是一款 Windows Media Player 的插件,提供很多实用功能,Mark 一下.
- Sqlserver数据库日志太大如何快速删除
sqlserver使用在windows系统中,如果文件超上百GB了,我们还直接删除不了,这个问题我以前的apache日志就碰到过,至今还没删除呢,那么Sqlserver数据库日志太大如何快速删除呢,有 ...
- js获取当前日期时间同时显示星期
JavaScript获取当前日期时间同时显示星期几,具体代码如下: <html> <head> <meta http-equiv="Content-Type&q ...