madnh/laravel-model-labels

支持获取模型字段的标签,从模型::$labels 属性或 Laravel 的本地化功能中获取

0.4.1 2017-03-01 08:30 UTC

This package is not auto-updated.

Last update: 2024-09-28 19:52:52 UTC


README

支持获取模型字段的标签,从模型::$labels 属性或 Laravel 的本地化功能中获取

安装

  1. 将此包添加到 composer.json
composer require madnh/laravel-model-labels
  1. 在模型类中使用 MaDnh\LaravelModelLabels\LabelsTrait
use MaDnh\LaravelModelLabels\LabelsTrait;

class Country extends Model
{
    use SoftDeletes, LabelFieldTrait;
    
   //Model contents...

属性

  1. static::$label_path

本地路径前缀,默认为 model_<model_name_in_snake_case>。示例

public static $label_path = 'flag'; //Default is model_flag
  1. static::$labels

模型标签。属性名(作为键)和标签(作为值)的数组

示例

public static $labels = [
    'id' => 'ID',
    'full_name' => 'Họ và tên'
];
  1. static::$labels_trans_map

标签转换映射,当在标签缓存、本地化、静态 $labels 中找不到属性标签时使用。

如果属性未定义在此数组中,将使用自动转换函数 - 尝试获取小写属性名的标题大小写标签:id => Id。

特别适用于缩写词,如 ID、VIP、CMND、..

示例

public static $labels_trans_map = ['id' => 'ID']; //Auto convert label is Id 
  1. static::$label_cached

缓存标签。优先级最高。

用法

标签优先级

模型缓存 > Laravel 国际化 > 模型 static::$labels

定义标签

标签可以存储在模型的静态属性中,也可以存储在本地化文件中。本地化文件中的标签将覆盖模型的静态属性

  1. 在模型类中定义标签

定义一个名为 $labels 的静态属性,它是一个标签数组,键是字段名,值是标签。标签可以是字符串或可调用值。如果它是可调用值,则将使用其结果作为标签,该可调用函数有 1 个参数,即需要获取标签的字段。

class Country extends Model
{
    use SoftDeletes, LabelFieldTrait;
    
    //...
    
    public static $labels = [
        'name' => 'Name of country',
        'flag' => function($field){
            return 'Flag ('.$field.')';
    }];
    
    //...
  1. 在本地化文件中定义标签

将文件添加到网站的本地化文件夹中,命名为 model_<model_name_in_snake_case>.php。此本地化文件返回一个字符串数组。模型的字段标签存储在键 field 中,它是一个字段名和标签的数组。

<?php
return [
    'field' => [
        'name' => 'Tên quốc gia'
    ]
];

获取标签

使用以下方法获取标签

示例

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use App\Models\Country;

class CreateCountryRequest extends FormRequest
{
    public function rules()
    {
        return [
            'name' => 'required'
        ];
    }
    public function attributes()
    {
        return Country::labels('name');
    }