Laravel帮助函数 config()
参看 config(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中?
网友评论