想象一下,存在一个具有以下属性的User
模型实例:
User {
id: 1,
name: 'Alexandre Thebaldi',
email: 'alexandre@email.com'
}
在视图中,我想使用@foreach
语句自动打印每个列别名+值,例如:
<ul>
@foreach($user as $attribute)
<li>{{ $attribute->column_alias }}: {{ $attribute->value }}</li>
@endforeach
</ul>
将像Validator属性别名一样工作。输出结果应为:
有一些方法可以做到这一点吗?
答案 0 :(得分:3)
您可以调用$someModel->toArray()
(或->getAttributes()
,这将隐藏密码等敏感数据)以获取基础数据阵列。这样,您可以打印列名称及其值:
<ul>
@foreach($user->toArray() as $key => $attribute)
<li>{{ $key }}: {{ $attribute }}</li>
@endforeach
</ul>
但你的钥匙会说,例如&#34; id&#34;,&#34; name&#34;等等,而不是更长的单词。我建议把它放在翻译文件中。仅作为一个例子:
<ul>
@foreach($user->toArray() as $key => $attribute)
<li>{{ __('user-model-keys.'.$key) }}: {{ $attribute }}</li>
@endforeach
</ul>
resources/lang
包含您希望应用程序所使用的每种语言的文件夹。其中的每个文件都包含您的翻译作为返回的数组。所以如果你想翻译&#34; id&#34; as&#34; Identification&#34;,并且您的语言是英语,然后根据上面的代码创建一个文件resources/lang/en/user-model-keys.php
并将其放入:
<?php
return [
'id' => 'Identification'
];
现在,__('user-model-keys.id')
将翻译&#34; id&#34;到&#34;识别&#34;。
您可以在此处详细了解本地化:https://laravel.com/docs/5.6/localization
答案 1 :(得分:2)
试试这个。
在您的模型中添加此
/**
* @var array
*/
protected $alias = [
'name' => 'user name',
'email' => 'User email',
'other property' => ' property alias'
];
/**
* @param $attribute
* @return string
*/
public function getAttributeAlias($attribute) {
return $this->alias[$attribute] ?: '';
}
然后你可以使用
<ul>
@foreach($user->getAttributes() as $attribute => $value)
<li>{{ $user->getAttributeAlias($attribute) }}: {{ $value }}</li>
@endforeach
</ul>
为了使其脱离模型,您可以添加像alias.config
return [
'user' => [
'name' => 'User name',
'email' => 'User Email',
'other property' => 'property alias'
],
'other model' => [
'other property' => 'property alias'
]
];
用法
<li>{{ config('alias.user.' . $attribute, '')) }}: {{ $value }}