我正在尝试创建一个全局助手来在我的 Laravel 应用程序中存储站点设置。这意味着,我需要一个助手来从 Controller 设置设置,并使用同一助手从任何地方访问该设置对象。我不需要将这些设置存储在数据库或文件中。这就是为什么我需要这些功能。
所做的事情如下,
- 在
app/Helpers
目录中创建一个名为SettingsHelper
的类,并自动加载该目录。
namespace App\Helpers;
class SettingsHelper{
protected $vars;
public function all(){
return $this->vars;
}
public function get($key, $default = null){
if (is_array($this->vars) && array_key_exists($key, $this->vars)) {
return $this->vars[$key];
}
return $default;
}
public function put($key, $value){
return $this->vars[$key] =$value;
}
}
- 创建一个辅助函数来解析该类(如果尚未解析)
if ( ! function_exists('settings')) {
function settings(){
if (app('\App\Helpers\SettingsHelper')) {
return app('\App\Helpers\SettingsHelper');
}
return app()->make('\App\Helpers\SettingsHelper');
}
}
- 使用助手设置和获取设置
settings()->put('test', 'test2');
dd(settings()->all());
但是返回了null
。我尝试转储 settings()->put('test', 'test2')
并返回传递的值 test2
。
这是正确的方法吗?
最佳答案
你应该register your class as a singleton in the application container在你可以使用它之前。否则,app()
函数将在每次使用时创建一个新实例。您还可以在容器中为实例命名,这样您就不必创建自己的全局函数。
在您的AppServiceProvider.php
中:
$this->app->singleton('settings', function ($app) {
return new \App\Helpers\SettingsHelper;
});
现在您可以将您的类(class)用于:
app('settings')->put('test', 'test2');
dd(app('settings')->all());
关于php - 如何在 Laravel 应用程序中使类可全局访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56593999/