对于一些使用比较频繁的函数,有时候想偷懒想巧几个字,使用全局函数可以达到这个目的。实现方法就两个:

方法一

这种方法就是直接在入口文件 web/index.php 里面写函数,示例代码如下:

  1. // something code ……
  2. // 全局函数
  3. if (!function_exists('pr')) {
  4. /**
  5. * 调试专用
  6. * @param $message
  7. * @param bool|true $debug
  8. */
  9. function pr($message, $debug = true)
  10. {
  11. echo '<pre>';
  12. print_r($message);
  13. echo '</pre>';
  14. if ($debug) {
  15. die;
  16. }
  17. }
  18. }
  19. (new yii\web\Application($config))->run();

当然你也可以把全局函数写到一个文件里面,比方说 common\helpers\GlobalFunctions.php,然后在 web/index.php 里面这样引用此文件:

// something code  ……
require __DIR__ . '/../../common/helpers/GlobalFunctions.php';
require __DIR__ . '/../config/bootstrap.php';
// something code  ……
(new yii\web\Application($config))->run();

PS:如果你使用的是高级模板的话,可能需要修改 backend 和 frontend 里面的 web/index.php 文件。

方法二(推荐)

这种方法主要是利用 composer 来实现,先把全局函数都可以写在 /common/helpers/GlobalFunctions.php 文件里面,然后在 composer.json 文件里面添加如下代码:

"autoload": {
"files": [
"common/helpers/GlobalFunctions.php"
]
},

添加完之后记得用终端在项目根目录下执行 composer dump 命令,然后就可以了。

总结

总结两种方案,我觉得第二种比较靠谱。最后附上我目前用的全局函数:

<?php
/**
 * author     : forecho <caizhenghai@gmail.com>
 * createTime : 2015/12/22 11:55
 * description:
 */
use yii\web\Response;
if (!function_exists('app')) {
/**
     * App或App的定义组件
     *
     * @param null $component Yii组件名称
     * @param bool $throwException 获取未定义组件是否报错
     * @return null|object|\yii\console\Application|\yii\web\Application
     * @throws \yii\base\InvalidConfigException
     */
function app($component = null, $throwException = true)
{
if ($component === null) {
return Yii::$app;
}
return Yii::$app->get($component, $throwException);
}
}
if (!function_exists('t')) {
/**
     * i18n 国际化
     * @param $category
     * @param $message
     * @param array $params
     * @param null $language
     * @return string
     */
function t($category, $message, $params = [], $language = null)
{
return Yii::t($category, $message, $params, $language);
}
}
if (!function_exists('user')) {
/**
     * User组件或者(设置|返回)identity属性
     *
     * @param null|string|array $attribute idenity属性
     * @return \yii\web\User|string|array
     */
function user($attribute = null)
{
if ($attribute === null) {
return Yii::$app->getUser();
}
if (is_array($attribute)) {
return Yii::$app->getUser()->getIdentity()->setAttributes($attribute);
}
return Yii::$app->getUser()->getIdentity()->{$attribute};
}
}
if (!function_exists('request')) {
/**
     * Request组件或者通过Request组件获取GET值
     *
     * @param string $key
     * @param mixed $default
     * @return \yii\web\Request|string|array
     */
function request($key = null, $default = null)
{
if ($key === null) {
return Yii::$app->getRequest();
}
return Yii::$app->getRequest()->getQueryParam($key, $default);
}
}
if (!function_exists('response')) {
/**
     * Response组件或者通过Response组织内容
     *
     * @param string $content 响应内容
     * @param string $format 响应格式
     * @param null $status
     * @return Response
     */
function response($content = '', $format = Response::FORMAT_HTML, $status = null)
{
$response = Yii::$app->getResponse();
if (func_num_args() !== 0) {
$response->format = $format;
if ($status !== null) {
$response->setStatusCode($status);
}
if ($format === Response::FORMAT_HTML) {
$response->content = $content;
} else {
$response->data = $content;
}
}
return $response;
}
}
if (!function_exists('params')) {
/**
     * params 组件或者通过 params 组件获取GET值
     * @param $key
     * @return mixed|\yii\web\Session
     */
function params($key)
{
return Yii::$app->params[$key];
}
}
if (!function_exists('session')) {
/**
     * Session组件或者通过Session组件获取GET值
     * @param null $key
     * @return mixed|\yii\web\Session
     */
function session($key = null)
{
if ($key === null) {
return Yii::$app->session;
}
return Yii::$app->getSession()->get($key);
}
}
if (!function_exists('cache')) {
/**
     * Cache组件或者通过Cache组件获取GET值
     * @param null $key
     * @return mixed|\yii\caching\Cache
     */
function cache($key = null)
{
if ($key === null) {
return Yii::$app->cache;
}
return Yii::$app->getCache()->get($key);
}
}
if (!function_exists('pr')) {
/**
     * 调试专用
     * @param $message
     * @param bool|true $debug
     */
function pr($message, $debug = true)
{
echo '<pre>';
print_r($message);
echo '</pre>';
if ($debug) {
die;
}
}
}