我正在开发一个Codeigniter项目,并希望开始使用常量。我知道Codeigniter支持全局常量,并且我已经设法在模型范围内实现它。
在" Baz"的开始模型:
const FOO = 'bar';
模特内的某处:
echo self::FOO; // prints 'bar'; - OK
但是,当我尝试从模型外部(从控制器或其他模型)调用它时:
echo $this->Baz::FOO;
尽管" Baz"模型之前正好加载了几行,它给我一个错误:
...语法错误,意外' ::' (T_PAAMAYIM_NEKUDOTAYIM)......
我知道有一个使用全局常量的选项,但IMO并没有遵循全局定义的变量和常量,因为它们应该仅用于特定模型而很少用于它们之外。这就是为什么我想知道是否还有其他方法可以从模型外部访问这些模型常量? 感谢
答案 0 :(得分:0)
假设您的模型类名称为const data = [{
"InventoryLevel2Id": "1234",
"InventoryLevel2Information": "Test Data",
"InventoryLevel2Name": "Test Data",
"InventoryLevel3s": [
{
"InventoryLevel3Id": "5678",
"InventoryLevel3Name": "Inner data at 1",
"InventoryLevel3Information": "Inner info at 1",
"InventoryLevel4s": [
{
"InventoryLevel4Id": "9101112",
"InventoryLevel4Name": "Inner data at 2",
"InventoryLevel4Information": "Inner info at 2",
"InventoryLevel5s": [
{
"InventoryLevel5Id": "131415",
"InventoryLevel5Name": "Inner data at 3",
"InventoryLevel5Information": "Inner info at 3",
}
],
}
]
}
]
}]
const mapRecursive = (inputData) =>
inputData.map(item =>
Object.keys(item).reduce((obj, key) => {
if (key.match("InventoryLevel.Id")) return { ...obj, uniquieId: item[key] };
if (key.match("InventoryLevel.Name")) return { ...obj, label1: item[key] };
if (key.match("InventoryLevel.Information")) return { ...obj, label2: item[key] };
if (key.match("InventoryLevel.s")) return { ...obj, innerState: { data: mapRecursive(item[key]) } };
}, {})
);
console.log(mapRecursive(data));
,您可以像下面那样访问常量;
Baz_model