全域的 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也是不好打字。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 12
sanders

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

1个月前 评论

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

1个月前 评论
陈先生

可以直接使用

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

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

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

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

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

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

1个月前 评论

在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"
        ]
    },
    ...
}
3周前 评论

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