Types de champs
Lochness CMS fournit une bibliothèque de champs prêts à l’emploi pour construire les formulaires d’édition de vos ressources. Chaque champ se déclare dans la méthode fields() de la ressource :
use Lochness\Fields\Text;
use Lochness\Fields\Select;
public function fields(): array
{
return [
Text::make('Titre', 'title')->required()->translated(),
Select::make('Statut', 'status')->options([
'draft' => 'Brouillon',
'published' => 'Publié',
]),
];
}Méthodes communes à tous les champs
Toutes les méthodes ci-dessous sont chaînables et héritées par chaque type de champ.
Visibilité
| Méthode | Description |
|---|---|
| `->showOnIndex(bool | Closure)` |
| `->hideFromIndex(bool | Closure)` |
| `->showOnDetail(bool | Closure)` |
| `->hideFromDetail(bool | Closure)` |
| `->showOnCreate(bool | Closure)` |
->onlyOnIndex() | Affichage uniquement dans la liste |
->onlyOnDetail() | Affichage uniquement dans la vue détail |
->onlyOnCreation() | Affichage uniquement à la création |
->onlyOnForms() | Affichage uniquement dans les formulaires |
| `->hidden(bool | Closure)` |
Configuration
| Méthode | Description |
|---|---|
->help(string $text) | Texte d’aide affiché sous le champ |
->label(string $label) | Libellé personnalisé |
->placeholder(string $text) | Texte indicatif dans le champ |
->default(mixed $value) | Valeur par défaut |
->class(string $css) | Classes CSS additionnelles |
->spacing(string $classes) | Classes d’espacement |
Validation
| Méthode | Description |
|---|---|
| `->rules(string | array $rules)` |
| `->creationRules(string | array $rules)` |
| `->updateRules(string | array $rules)` |
| `->required(bool | Closure)` |
->nullable() | Autorise les valeurs nulles |
->unique(bool) | Valeur unique en base |
État et accès
| Méthode | Description |
|---|---|
| `->readonly(bool | Closure)` |
| `->disabled(bool | Closure)` |
->translated(bool) | Active le support multi-langue |
->searchable(bool) | Rend le champ recherchable depuis la liste |
->seo(bool) | Place le champ dans la section SEO |
Avancé
| Méthode | Description |
|---|---|
->html() | Autorise le contenu HTML brut |
->textAlign(string) | Alignement dans la liste (text-left, text-center, text-right) |
->withMeta(array $meta) | Métadonnées arbitraires |
Champs texte
Text
Champ texte sur une ligne.
Text::make('Titre', 'title')Textarea
Zone de texte multi-lignes.
Textarea::make('Description', 'description')->rows(8)| Méthode | Description |
|---|---|
->rows(int) | Nombre de lignes (défaut : 5) |
Title
Champ titre dédié à l’éditorial et au SEO.
Title::make('Titre de page', 'page_title')Markdown
Éditeur Markdown.
Markdown::make('Contenu', 'body')->rows(15)| Méthode | Description |
|---|---|
->rows(int) | Hauteur de l’éditeur (défaut : 5) |
Masqué de la liste par défaut.
Redactor
Éditeur de texte riche avec barre d’outils configurable.
Redactor::make('Contenu', 'content')
->toolbar(['bold', 'italic', 'link', 'list'])
->plugins(['fileexplorer'])| Méthode | Description |
|---|---|
->rows(int) | Hauteur de l’éditeur |
->toolbar(array) | Boutons : add, html, format, bold, italic, deleted, list, link, table |
->plugins(array) | Plugins : alignment, filelink, fileexplorer |
Slug
Champ d’URL simplifié (slug).
Slug::make('Slug', 'slug')Password
Champ mot de passe avec générateur intégré optionnel. Masqué de la liste et de la vue détail par défaut.
Password::make('Mot de passe', 'password')->showGenerator()->length(16)| Méthode | Description |
|---|---|
->showGenerator() / ->hideGenerator() | Active ou désactive le générateur |
->length(int) | Longueur du mot de passe généré (défaut : 10) |
Champs de choix
Checkbox
Case à cocher booléenne.
Checkbox::make('En ligne', 'online')->default(true)| Méthode | Description |
|---|---|
->values($trueValue, $falseValue) | Personnalise les valeurs stockées |
->trueValue($value) / ->falseValue($value) | Valeurs individuelles |
Select
Liste déroulante.
Select::make('Statut', 'status')
->options(['draft' => 'Brouillon', 'published' => 'Publié'])
->multiple()| Méthode | Description |
|---|---|
| `->options(array | Closure)` |
->multiple() | Sélection multiple |
Country
Liste déroulante pré-remplie avec tous les pays. Hérite de Select.
Country::make('Pays', 'country')Champs date et numériques
Date
Sélecteur de date.
Date::make('Date de publication', 'published_at')Datetime
Sélecteur de date et heure.
Datetime::make('Publié le', 'published_at')->format('d.m.Y H:i')| Méthode | Description |
|---|---|
->format(string) | Format d’affichage (défaut : d.m.Y H:i) |
Color
Sélecteur de couleur.
Color::make('Couleur', 'color')->default('#000000')Champs identifiants
ID
Affichage de la clé primaire (lecture seule).
ID::make('ID', 'id')Uuid
Champ UUID.
Uuid::make('Identifiant', 'uuid')OrderID
Champ d’identifiant d’ordre / séquence. Le libellé par défaut est “OrderID”.
OrderID::make('Ordre')
OrderID::forModel(Article::class)| Méthode | Description |
|---|---|
->asBigInt() | Convertit en chaîne pour la compatibilité JavaScript |
Champs structurés
Json
Éditeur JSON brut. Masqué de la liste par défaut.
Json::make('Configuration', 'config')->rows(10)| Méthode | Description |
|---|---|
->rows(int) | Hauteur de l’éditeur (défaut : 5) |
Links
Collection de liens.
Links::make('Liens', 'links')Embeds
Contenu embarqué (iframe, code embed).
Embeds::make('Embed', 'embed_code')Place
Champ d’adresse avec autocomplétion et géocodage. Permet de mapper les composants de l’adresse (ville, code postal, latitude, etc.) vers d’autres attributs du modèle.
Place::make('Adresse', 'address')
->onlyCities()
->countries(['CH', 'FR'])
->city('city')
->postalCode('postal_code')
->country('country_code')
->latitude('lat')
->longitude('lng')| Méthode | Description |
|---|---|
->onlyCities() | Restreint l’autocomplétion aux villes |
->countries(array) | Limite par codes pays (ISO 3166) |
->type(string) | Type de lieu |
->language(string) | Langue de l’autocomplétion |
->city(string), ->state(), ->postalCode(), ->suburb(), ->country(), `->secondAddressLine(string | null), ->latitude(), ->longitude()` |
Champs visuels
Thumbnail
Aperçu d’image dans la liste. Affiché uniquement dans la liste par défaut.
Thumbnail::make('Vignette', 'thumbnail')
->width(150)
->height(150)
->conversion('thumb')| Méthode | Description |
|---|---|
->width(int) / ->height(int) | Dimensions (défaut : 200×200) |
->filename(string) | Champ source du fichier |
->conversion(string) | Nom de la conversion d’image (Spatie Media Library) |
Separator
Séparateur visuel ou titre de section. Ne stocke aucune donnée. Masqué de la liste par défaut.
Separator::make('Informations SEO')Section
Conteneur logique pour regrouper plusieurs champs. Ne correspond pas à une colonne en base.
Section::make('seo')
->label('Référencement')
->help('Ces informations apparaissent dans les moteurs de recherche.')
->fields([
Text::make('Meta title', 'meta_title')->translated(),
Textarea::make('Meta description', 'meta_description')->translated(),
])Champs de relation
BelongsTo
Relation de type “appartient à”. Permet de lier un enregistrement à un autre.
BelongsTo::make('Auteur', 'author')
->options(fn () => Author::all())
->useField('full_name')
->link()| Méthode | Description |
|---|---|
| `->options(array | Closure)` |
->multiple() | Sélection multiple |
->useField(string) | Champ utilisé pour l’affichage (défaut : title) |
->link(bool) | Active le lien dans la vue liste |
->route(string $uri, string $keyname) | Route personnalisée |
ManyToMany
Relation plusieurs-à-plusieurs.
ManyToMany::make('Catégories', 'categories')
->options(fn () => Category::all())
->multiple()| Méthode | Description |
|---|---|
| `->options(array | Closure)` |
->multiple() | Sélection multiple (généralement activée) |
PageBuilder
Le champ PageBuilder constitue un système à part entière de blocs configurables. Il dispose de sa propre page de documentation.
Voir Page Builder pour la liste des blocs et la configuration complète.