我刚开始和Laravel 合作.我需要重写我几年前创建的整个系统,使用Laravel4作为基础框架.在我的旧系统中,我通常有一个声明了一些常量的constant.php
文件和一个包含大量数组集(例如,类别、状态、事件类型、语言等)的globals.php
文件.通过这样做,我可以使用类似于
foreach ( $langs as $code => $domain ) {
// Some stuff
}
在我的应用程序中的任何地方.
我的问题是,我怎样才能以所谓的"laravel方式"存储这些信息.我try 使用某种对象来存储此信息,将其设置为服务,并为其创建一个外观:
app/libraries/Project/Constants.php
namespace PJ;
class Constants {
public static $langs = [
'es' => 'www.domain.es',
'en' => 'www.domain.us',
'uk' => 'www.domain.uk',
'br' => 'www.domain.br',
'it' => 'www.domain.it',
'de' => 'www.domain.de',
'fr' => 'www.domain.fr'
];
}
app/libraries/Project/ConstantsServiceProvider.php
namespace PJ;
use Illuminate\Support\ServiceProvider;
class ConstantsServiceProvider extends ServiceProvider {
public function register() {
$this->app->singleton('PJConstants', function() {
return new Constants;
});
}
}
app/libraries/Project/ConstantsFacade.php
namespace PJ;
use Illuminate\Support\Facades\Facade;
class ConstantsFacade extends Facade {
protected static function getFacadeAccessor() {
return 'PJConstants';
}
}
composer.json个
"psr-4": {
"PJ\\": "app/libraries/Project"
},
所以我以PJ\Constants::$langs
的身份访问该房产.
这是可行的,但我怀疑这是最有效或正确的方法.我的意思是,通过创建一个完整的服务Provider 和门面以及所有这些东西来"传播"一个变量,这是正确的方式吗?或者我应该把这些数据放在哪里?
谢谢你的建议.
EDIT # 01个
我想传递给所有控制器和视图的数据可以直接在脚本中设置,就像我文章开头的例子一样,but它也可以动态生成,例如从数据库生成.这些数据可以是一个类别列表.我需要它们在所有视图中生成导航栏,但我也需要它们定义一些路由模式(比如/category/subcategory/product
),还需要它们在几个控制器中解析一些信息(比如从包含X产品的类别中获取信息).
我的数组类似于:
$categories = [
1 => ['name' => 'General', 'parent' => 0, 'description' => 'Lorem ipsum...'],
2 => ['name' => 'Nature', 'parent' => 0, 'description' => 'Lorem ipsum...'],
3 => ['name' => 'World', 'parent' => 0, 'description' => 'Lorem ipsum...'],
4 => ['name' => 'Animals', 'parent' => 2, 'description' => 'Lorem ipsum...']
]
举个例子.索引是类别的id,值是与类别关联的信息.
我还需要此数组,在所有控制器和视图中都可用.
那么,我应该将其保存为配置变量吗?否则我如何存储这些数据;什么是最好的、语义正确的方法?