Partage
  • Partager sur Facebook
  • Partager sur Twitter

Laravel - Alias pour noms d'attributs de modèle

    26 mars 2019 à 14:45:39

    Bonjour à tous,

    Je développe en ce moment une application Laravel et je rencontre une difficulté pour l'affichage d'un formulaire.

    Ce formulaire permet d'ajouter dans une base de donnée un site, dont voici le modèle:

    class Site extends Model
    {
        protected $fillable = [
            'name',
            'num_site',
            'adresse', 
            'cartes_anciennes', 
            'carte_topo',
            'cadastre_remembre',
            'cadastre_moderne',
            'cadastre_ancien',
            'lieu_dit',
            'nature_parcelles',
            'conditions_acces',
            'situation_administrative',
            'altitude',
            'relief',
            'hydrographie',
            'geologie',
            'vestiges_periode',
            'vestiges_nature',
            'vestiges_conservation',
            'plans_documents_figures',
            'sources_manuscrites',
            'sources_imprimees',
            'bibliographie',
            'historiographie',
            'histoire',
            'description_histoire_monumentale',
        ];
    
        public function city() {
            return $this->belongsTo('App\City');
        }
    }

    Comme vous le voyez un site contient pas mal d'attribut (je n'ai pas tout montré sur la première capture d'écan), donc je souhaitais boucler sur les attributs pour afficher chaque champ du formulaire. C'est ce que j'ai fait, voici le controlleur de ma ressource Site:

    public function create($city)
        {
            $inputs = getAttributeTypes()[0];
            $textareas = getAttributeTypes()[1];
            $site = new Site;
            $attributes = $site->getFillable();
            return view('sites.create', compact('city', 'attributes', 'inputs', 'textareas'));
        }

    La fonction getAttributeTypes() est un helper qui retourne un tableau contenant les attributs de type string qui seront donc dans des input et les attributs de type text qui seront dans des textarea. Et je récupère les attributs de mon modèle qui sont précisés en tant que propriété fillable dans mon modèle. Voici la partie de ma vue qui se charge de générer le formulaire:

    @foreach($attributes as $attribute)
    @if(in_array($attribute, $inputs))
    <div class="form-group">
    <labelclass="col-md-4 control-label">{{$attribute}} :</label>
    <div class="col-md-6">
    <input type="text" class="form-control" name="{{$attribute}}">
    </div>
    </div>
    @elseif(in_array($attribute, $textareas))
    <div class="form-group">
    <label class="col-md-4 control-label">{{ $attribute }} :</label>
    <div class="col-md-9">
    <textarea class="form-control" name="{{$attribute}}"></textarea>
    </div>
    </div>
    @endif
    @endforeach

    Le problème tel quel comme vous avez pu le voir c'est que mes noms d'attributs dans les labels sont moches puisqu'ils reprennent le nom des champs du tableau $fillable de mon modèle.

    J'aimerais donc pour chacun préciser un alias à afficher, mais je ne sais pas où ni comment définir cela proprement.

    -
    Edité par Skeryy 26 mars 2019 à 14:48:01

    • Partager sur Facebook
    • Partager sur Twitter

    Laravel - Alias pour noms d'attributs de modèle

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown