米粒人生 2018-02-04 22:22:41 5200次浏览 0条评论 4 2 0

借鉴Laravel5.2+的一些helper函数,Yii2在helper函数中也可以实现很多类似的有用函数。
比如,新建一个helper.php,放在某个目录下,比如./config/下。在web.php配置文件中引入:

这里写图片描述

helper里面可以定义一些常用的函数。

app()

Laravel的app()函数相当于Yii2的Yii:$app + Yii::$container,用来自动解析依赖,获取类的实例时非常方便,在helper中也可以实现类似的功能:

if (!function_exists('app')) {
    /**
     * Get the available container instance.
     *
     * @param string $instance
     *
     * @return mixed|\yii\di\Container
     */
    function app($instance = null)
    {
        if (is_null($instance)) {
            return Yii::$container;
        }

        if (Yii::$app->has($instance)) {
            return Yii::$app->get($instance);
        }

        return Yii::$container->get($instance);
    }
}
  • 什么参数都不传,返回Yii:$container容器
  • 传递$instance实例名时,首先从Yii::$app获取组件,比如request,response,db这些,如果没有获取到再到Yii:$container容器中获取

这样我们就简化了很多写法:

Yii::$app->request
简化为
app('request')

Yii::$container->get('userService')
简化为
app('userService')

$user = app('\common\model\User')

...

写起来会比较方便。不过,IDE代码跟踪会差一些。

dd()

我们经常会调试代码,打印一些变量。常用的是var_dump()。对这个做一些优化,可以得到:

if (!function_exists('dd')) {
    function dd(...$param)
    {
        foreach ($param as $p)  {
            \yii\helpers\VarDumper::dump($p, 10, true);
            echo '<pre>';
        }
        exit(1);
    }
}

代码:

$user = Yii::$app->user->identity;
$comment = Comment::find()->where(['>', 'id', 1])->one();
dd($user->toArray(),$comment->toArray());

效果:
这里写图片描述

dd()可传多个参数,就像var_dump()一样。

env()

可以用来获取环境变量的值:

if (!function_exists('env')) {
    function env($key, $default = null)
    {
        $value = getenv($key);

        if ($value === false) {
            return value($default);
        }

        switch (strtolower($value)) {
            case 'true':
            case '(true)':
                return true;

            case 'false':
            case '(false)':
                return false;

            case 'empty':
            case '(empty)':
                return '';

            case 'null':
            case '(null)':
                return;
        }

        if (('"' === substr($value, 0, 1)) && ('"' === substr($value, -1, 1))) {
            return substr($value, 1, -1);
        }

        return $value;
    }
}

value()

if (!function_exists('value')) {
    /**
     * Return the default value of the given value.
     *
     * @param mixed $value
     *
     * @return mixed
     */
    function value($value)
    {
        return $value instanceof Closure ? $value() : $value;
    }
}

getVal()

yii\helpers\ArrayHelper::getValue 太长了,做个简写:

if (!function_exists('getVal')) {
    /**
     * 从对象,数组中获取获取数据.
     *
     * @param $array mixed 数组或者对象
     * @param $key array|string 对象的属性,或者数组的键值/索引,以'.'链接或者放入一个数组
     * @param $default string 如果对象或者属性中不存在该值事返回的值
     *
     * @return mixed mix
     **/
    function getVal($array, $key, $default = '')
    {
        return yii\helpers\ArrayHelper::getValue($array, $key, $default);
    }
}

yiiUrl()

在html中这个函数会方便生成url

if (!function_exists('yiiUrl')) {
    /**
     * 创建url.
     *
     * @param $url string 对象的属性,或者数组的键值/索引,以'.'链接或者放入一个数组
     *
     * @return mixed mix
     **/
    function yiiUrl($url)
    {
        return Yii::$app->urlManager->createUrl($url);
    }
}

yiiParams

获取Yii::$app->params 同样非常常用,也做个简写:

if (!function_exists('yiiParams')) {
    /**
     * 获取yii配置参数.
     *
     * @param $key string 对象的属性,或者数组的键值/索引,以'.'链接或者放入一个数组
     *
     * @return mixed mix
     **/
    function yiiParams($key)
    {
        return Yii::$app->params[$key];
    }
}

在笔者的实际开发,这些helper函数能有效提高写代码效率,大家不妨试试!

原文链接:http://blog.csdn.net/qq_24127857/article/details/79255442

觉得很赞
    没有找到数据。
您需要登录后才可以评论。登录 | 立即注册