全域的 Config::set 和 Config::get 怎麼實作?

1). 当前使用的 Laravel 版本? 10

2). 当前使用的 php 版本?8.2

向各位先進請教,要如何的來實作出 Config::set 和 Config::get 的功能,且如同輔助函式為全域不必每支class作import,謝謝。

以前舊版本laravel 4.x 支援:

獲取一個選項的值
Config::get('app.timezone');

如果選項值不存在,你可以指定一個預設值:
$timezone = Config::get('app.timezone', 'UTC');

設定一個選項的值
Config::set('database.default', 'sqlite');

使用 Config::set 和 Config::get 方法。

後來laravel 5 以後版本改成:

獲取一個選項的值
$value = config('app.timezone');

如果配置值不存在,則檢索默認值...
$value = config('app.timezone', 'Asia/Seoul');

設定一個選項的值
config(['app.timezone' => 'America/Chicago']);

新版本”設定一個選項的值”方法,沒有 Config:set 來的直觀,coding也是不好打字。

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 12
sanders

习惯就好了,辅助函数已经默认被导入了。但如果涉及到从框架版本4到10的迁移,那工作量确实不小。

3个月前 评论

新版本 Config::get 还有吧,,,

3个月前 评论
陈先生

可以直接使用

config()->set('config_key','new value you want to set')
3个月前 评论
rfrkk (楼主) 3个月前

查看源码发现 Config 门面仍然存在的,位置:\Illuminate\Support\Facades\Config,可以继续这么调用:

\Illuminate\Support\Facades\Config::set('config_key','new value you want to set')

Config 门面所有可用的方法都在类:\Illuminate\Config\Repository 里面

3个月前 评论
rfrkk (楼主) 3个月前
sanders 3个月前
rfrkk (楼主) 3个月前
JaguarJack 3个月前
messikiller (作者) 2个月前

0个参数返回Config对象, 1个参数读取值,2个参数设置值

3个月前 评论

在composer文件autoload项目中添加一个psr-0项目,在该项目中不带命名空间的项指向一个自定义文件夹,在该文件中自定义facede或者继承laravel自带的facede即可全局不需要use就直接使用该facede类。

{
    "name": "laravel/laravel",
    ...
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        },
        "psr-0": {
            // 命名空间为空"", 指向app\support目录, 可以随意更改
            // 在app\support目录定义facade类即可
            "": "app/support/"
        },
        "files": [
            "app/helpers.php"
        ]
    },
    ...
}
2个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!