madnh / laravel-model-labels
Support get label of model's fields, from model::$labels property or Laravel's localization features
Installs: 3 116
Dependents: 0
Suggesters: 1
Security: 0
Stars: 7
Watchers: 2
Forks: 3
Open Issues: 1
Requires
- php: >=5.4.0
- laravel/framework: ^5.0
This package is not auto-updated.
Last update: 2024-11-23 20:47:56 UTC
README
Support get label of model's fields, from model::$labels property or Laravel's localization features
Install
- Add this package to
composer.json
composer require madnh/laravel-model-labels
- In model classes, use
MaDnh\LaravelModelLabels\LabelsTrait
use MaDnh\LaravelModelLabels\LabelsTrait; class Country extends Model { use SoftDeletes, LabelFieldTrait; //Model contents...
Properties
static::$label_path
Prefix of locale path, default is model_<model_name_in_snake_case>
. Example:
public static $label_path = 'flag'; //Default is model_flag
static::$labels
Model labels. Array of properties name (as keys) and labels (as value)
Example:
public static $labels = [ 'id' => 'ID', 'full_name' => 'Họ và tên' ];
static::$labels_trans_map
Label trans map, use when can't find label of a property in label cached, locale, static $labels.
If the property is not defined in this array, will use the auto convert function - which try to get the label in title case of lower cased property name: id => Id .
Special useful for acronym words like ID, VIP, CMND,..
Example:
public static $labels_trans_map = ['id' => 'ID']; //Auto convert label is Id
static::$label_cached
Cached labels. Priority is highest.
Usage
Label priority
Model cache > Laravel i18n > Model static::$labels
Define labels
Label can store in a static property of model, or in a locale file. Labels in locale files will override model's static property
- Define labels in model class
Define a static property named $labels
, it is an array of labels, with key is fields name, value is label.
Label maybe a string or callable value. If it's a callable value, then result of it will used as label, that callable has 1 argument, it is the field need to get label.
class Country extends Model { use SoftDeletes, LabelFieldTrait; //... public static $labels = [ 'name' => 'Name of country', 'flag' => function($field){ return 'Flag ('.$field.')'; }]; //...
- Define labels in locale files
Add file to site's locale folder, named model_<model_name_in_snake_case>.php
.
This locale file return an array of string. Labels of model's fields store at a key named is field
, it is an array of field name and label.
<?php return [ 'field' => [ 'name' => 'Tên quốc gia' ] ];
Get labels
Use following methods to get labels
Examples
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'); }