【发布时间】:2017-09-22 03:14:52
【问题描述】:
问题
我想为一个模型属性设置访问器和修改器,但使用通配符 我为不同的语言存储了属性,称为 tags_en、tags_es、Tags_fr 等。用于 (8) 语言标签
我想在标签模型中为所有 8 种语言子类型 一次 设置一个访问器和一个修改器,而不是使用一对访问器/修改器方法他们每个人。
通常会为每个人做以下事情,例如标签_zh
public function getTagsEnAttribute($tags){
return join(', ', json_decode($tags));
}
public function setTagsEnAttribute($tags){
$this->attributes['tags_en'] =
json_encode(
array_map('trim', explode(',', $tags))
);
}
然后我必须为每种语言的标签重复它们,这些标签目前是 8 种语言,这是不实用的。
我的目标
使用通配符执行访问器和修改器的任何方式(当然不能以这种方式工作):
public function getTagsWildcardAttribute($tags){
return join(', ', json_decode($tags));
}
或
类似:
foreach ($tagsAttributes as $TagAttribute){
//method building code for each tags language
}
类似的 Laravel 想法存在用于使用通配符进行验证
我认为可能有一种方法可以通过 laravel 模型类使用通配符来实现。这类似于验证器,您可以像这样验证数组的每个元素:
$validator = Validator::make($request->all(), [
'person.*.email' => 'email|unique:users',
'person.*.first_name' => 'required_with:person.*.last_name',
]);
问题:
- 如果这些模型带有通配符的访问器和修改器在当前的 laravel 框架中不可用 - 你是否同意我的观点,这值得 在下一个 laravel 版本中添加?
- 如果是这样,那么如何正式要求 laravel 制造商在即将发布的版本中考虑这一点?
- Stackoverflow 工作人员能否代表我们向 laravel 构建者请求改进(如果他们看到了)?
【问题讨论】:
-
他们需要成为访问者和修改者吗?有没有理由不能只在模型上使用方法?
-
我更愿意使用模型可用的 laravel 框架方法,而不是重新发明轮子——当然我认为可能有一种方法可以通过 laravel 模型类来实现。这类似于 Validator,您可以像这样验证数组的每个元素: $validator = Validator::make($request->all(), [ 'person.*.email' => 'email|unique:users' , 'person.*.first_name' => 'required_with:person.*.last_name', ]);
-
我有点困惑:你的数据库中是否真的有所有这些列:
tags_en、tags_es等?还是您只有一个名为tags的 JSON 列? -
我在表格中有所有这些列,因为我需要在刀片中查看它们在不同的选项卡组下每个不同的语言。
-
我认为我的解决方案对你有用。请看。
标签: php laravel wildcard accessor mutators