美文网首页
Laravel 帮助函数 --- config相关知识

Laravel 帮助函数 --- config相关知识

作者: 爱折腾的傻小子 | 来源:发表于2018-10-29 11:00 被阅读24次
Laravel帮助函数 config()

参看 config(key = null,defaulu = null) 定义

if (! function_exists('config')) {
    /**
     * Get / set the specified configuration value.
     *
     * If an array is passed as the key, we will assume you want to set an array of values.
     *
     * @param  array|string  $key
     * @param  mixed  $default
     * @return mixed
     */
    function config($key = null, $default = null)
    {
        if (is_null($key)) {
            return app('config');
        }

        if (is_array($key)) {
            return app('config')->set($key);
        }

        return app('config')->get($key, $default);
    }
}
//> 使用举例
-- 返回当前key对应的值,如果存在; 
config('app.timezone');  //> 获取config/app.php文件中的timezone键 | 如果不存在默认null
-- 返回当前key对应的值,如果存在;
config('foo','foo');  //> 获取foo键对应的值 | 如果不存在默认foo (改值可能是set()设置的值)
--
config(['app'=>'app','b'=>1]); //> 添加 | 修改 指定键对应的值(如果存在就修改,否则新增)
Laravel的Config门面

Config门面和config()一样的功能

//> 门面Config相关方法,当前也是也是使用config()辅助函数使用
protected $items = [];  //> 改属性,在服务器提供者,已服务器容器的形式注入
//> 注入的是Config目录下的所有文件,以数组的形式
config(null)->all();
Config::all();
app('config')->all();
//> 上面三种形式都能打印出$items内容,打印结果如下:(请对比config目录)
//> 判断指定的$key是否存在$this->$items数组中
    /**
     * Determine if the given configuration value exists.
     *
     * @param  string  $key
     * @return bool
     */
    public function has($key)
    {
        return Arr::has($this->items, $key);
    }
//> 使用形式 ----- 
\Illuminate\Support\Facades\Config::has('foo');  //> 返回bool值
\Illuminate\Support\Facades\Config::has('app.local');  //> 当然可以使用.的形式(如使用对象)
config()->has('foo');
config(null)->has('app.local');
//> 获取指定的key对应的值(当然是在$this->$items数组中) | 如不存在返回指定默认值
    /**
     * Get the specified configuration value.
     *
     * @param  string  $key
     * @param  mixed   $default
     * @return mixed
     */
    public function get($key, $default = null)
    {
        return Arr::get($this->items, $key, $default);
    }
//> 使用举例 ------ 这里的点就好像代替类数组的[]一样,又像在使用对象一样
\Illuminate\Support\Facades\Config::get('foo');  //> 如果不存在,返回null
\Illuminate\Support\Facades\Config::get('app.local','not');  //> 如果不存在,返回not
config()->get('foo');
config(null)->get('app.local');
    //> 设置配置参数,如果存在,就修改参数值,如果不存在就新增
    /**
     * Set a given configuration value.
     *
     * @param  array|string  $key
     * @param  mixed   $value
     * @return void
     */
    public function set($key, $value = null)
    {
        $keys = is_array($key) ? $key : [$key => $value];

        foreach ($keys as $key => $value) {
            Arr::set($this->items, $key, $value);
        }
    }
    //> 我们看到参数$key是支持字符串和数组的形式;在例子中,如下:
    # 如果存在foo,就修改为123;如果不存在foo,就新增一个key-value
    \Illuminate\Support\Facades\Config::set('foo','123');
    # 使用数组的形式,批量修改|新增配置key-value对
    \Illuminate\Support\Facades\Config::set(['foo'=>'foo','ts'=>1]);
    config()->set('foo','123');
    config(null)->set(['foo'=>'foo','ts'=>1]);
//> 返回$items属性值
    /**
     * Get all of the configuration items for the application.
     *
     * @return array
     */
    public function all()
    {
        return $this->items;
    }
//> 使用方式如最上面;
//> 向指定key数组中开头插入值$value
    /**
     * Prepend a value onto an array configuration value.
     *
     * @param  string  $key
     * @param  mixed  $value
     * @return void
     */
    public function prepend($key, $value)
    {
        $array = $this->get($key);

        array_unshift($array, $value);

        $this->set($key, $array);
    }
//> 使用举例 ----(其他形式如上面)
app('config')->prepend('auth.guards.web','author');
# 当然:如果是插入的数组:['b'=>'author'],插入后的形式 : 0=>['b'=>'author'] 该形式

修改后:


修改前:


//>  替换key对应的值为$value
    /**
     * Push a value onto an array configuration value.
     *
     * @param  string  $key
     * @param  mixed  $value
     * @return void
     */
    public function push($key, $value)
    {
        $array = $this->get($key);

        $array[] = $value;

        $this->set($key, $array);
    }
//> 举例 -----
config()->push('foo','foo');  //> 替换foo对应的值为foo (如果存在时)
//> 下面的几个方法,和上面其他不同名,一样的功能
    /**
     * Determine if the given configuration option exists.
     *
     * @param  string  $key
     * @return bool
     */
    public function offsetExists($key)
    {
        return $this->has($key);
    }

    /**
     * Get a configuration option.
     *
     * @param  string  $key
     * @return mixed
     */
    public function offsetGet($key)
    {
        return $this->get($key);
    }

    /**
     * Set a configuration option.
     *
     * @param  string  $key
     * @param  mixed  $value
     * @return void
     */
    public function offsetSet($key, $value)
    {
        $this->set($key, $value);
    }

    /**
     * Unset a configuration option.
     *
     * @param  string  $key
     * @return void
     */
    public function offsetUnset($key)
    {
        $this->set($key, null);
    }

//> 上面这些方法:config()、Config门面、app('config')都能使用

laravel的容器解析函数app() --- 帮助函数
//> 获取服务器容器里指定的make实例对象
if (! function_exists('app')) {
    /**
     * Get the available container instance.
     *
     * @param  string  $make
     * @param  array   $parameters
     * @return mixed|\Illuminate\Foundation\Application
     */
    function app($make = null, $parameters = [])
    {
        if (is_null($make)) {
            return Container::getInstance();
        }

        return Container::getInstance()->make($make, $parameters);
    }
}
//> 关于app()帮助函数,服务器容器时再具体学习讨论
# 关于app()辅助函数的使用
app()->make('route');  //> 解析路由对象  Route{#300}
app(null)->make('config');  //> 解析配置对象  这里解析出来的是Repository就是配置数组值
app('config',null);  //> 当然我们可以在解析对象时,传递参数

//> 下面打印的结果是一样的
dump(app()->make('config')['app']);
dump(app()->make('config')->get('app'));
  • 上面我们知道,config()的相关方法都是建立的Arr类上面的。我们来看看这个数组的处理类,提供的那些方法。(参看Laravel --- Arr)

思考?
服务器容器时怎样把config目录以数组的形式注入$item中?

相关文章

网友评论

      本文标题:Laravel 帮助函数 --- config相关知识

      本文链接:https://www.haomeiwen.com/subject/tcyfzttx.html