Salut,
Il serait intéressant de voir un exemple d'utilisation :D :D
Sinon, je trouve que c'est pas mal écrit :D (y)
@plus
Pierre
Bonjour, bonsoir
J'ai récemment eu l'envie de crée une sorte de mini-framework pour m'aider dans mes créations de site, et aussi pour m'amuser, et apprendre.
J'ai alors entrepris une folle aventure pour reproduire quelques concepts de Laravel que j'adore. Je suis pas un expert en PHP, loin de là même, disons que je me trouve même débutant, je me débrouille certes, mais c'est loin d'être incroyable.
J'ai donc crée deux petites classes (qui n'ont aucune prétention) pour me permettre de générer des formulaires (rien d'extraordinaire, je pense que je ne l'utiliserais même jamais, mais c'était bien rigolo) et une classe pour gérer les validations de formulaires (celle-là par contre c'est ma petite chouchoute, c'est un truc que j'ai adoré dans Laravel).
Et donc, j'aimerais avoir vos avis là-dessus, par avis j'entends, savoir où il pourrait y avoir des problèmes, pourquoi j'ai fais comme ça au lieu de faire comme ci, comment je pourrais rendre la classe encore meilleur etc...
Enfin voilà, je demande juste des avis constructifs pour savoir si j'ai bien compris le concept de la POO, des normes etc..
FormBuilder :
Validator :
Merci beaucoup !!
Salut,
Il serait intéressant de voir un exemple d'utilisation :D :D
Sinon, je trouve que c'est pas mal écrit :D (y)
@plus
Pierre
Salut,
merci de votre retour ^^
Alors voici un exemple pour chaque classe :
FormBuilder :
Validator :
Quelque chose comme ça, bon le formbuilder, je pense pas que ce soit vraiment super utile de l'utiliser, à part dans des cas très basiques où il fera l'affaire, mais dès que l'on veut par exemple faire un formulaire un peu plus "beau" et pas juste avec des inputs qui se suivent les uns les autres bah là ça devient plus compliqué, et j'ai pas encore trouvé la meilleure façon d'optimiser mon FormBuilder pour faire ce genre de choses, peut-être que je réessayerais plus tard ^^
Bonne journée.
Salut,
J'ai pas tout regardé, mais ça semble correct.
Pour être à fond dans la POO remplace tous tes private par protected pour prévoir l'héritage, si un jour t'as envie de surcharger cette classe pour y ajouter un nouveau comportement.
Salut Balsakup,
En effet, je n'y avais pas pensé, c'est une bonne idée !
Merci de votre retour
Je ne suis pas du tout un expert PHP non plus, je trouve tes classes bien écrites ;)
En plus de remplacer private par protected, je changerai peut être le retour de ta fonction validate pour renvoyer un array d'erreurs et non pas juste un booléen pour être plus explicite concernant les erreurs que l'utilisateur a pu faire, et pas juste un : "une erreur est survenue"
En faite,
Je récupère dans la vue les erreurs après, j'ai pas totalement fini la class, je vais rajouter des méthodes pour savoir s'il y a des erreurs, pour les afficher dans la vue etc..
Salut,
Je me suis lancé dans une classe de formulaires un peu semblable à celle-ça dans le principe et le premier conseil que j'ai reçu c'est de morceler ma classe.
Tu as une class pour le formulaire et une classe pour chaque type de champ.
ça t'oblige a faire plus de class mais c'est au final plus modulable.
ça peut donner un truc du genre :
Voici un principe de classes très rapide.
La classe de formulaire. Elle stocke les champs et ensuite les affiche.
Ensuite tu as une class "standard" pour faire le rendu d'un champs car beaucoup sont très proches :
On a donc une classe de base et d'autres qui l'étendent
Tu peux voir que les classes ne font que définir le type.
Pour le texarea le rendu est un peu différent donc dans sa classe on ré-écrit le méthode render();
Maintenant admettons que tu ai besoin d'ajouter une classe à tout tes champs en fonction d'un framework tu peux faire ça :
Et tu peux même ré-écrite la méthode render() si tu veux entourer chaque champ avec un div ou autre...
Mais comme ça si tu veux passer un un autre framework, Bulma, semantic-ui, autre tu as juste a créer un héritage de Formulaire pour adapter juste le rendu. Tout le code "métier" ne change pas.
En espérant t'avoir aidé.
Kaimite
Hey Kaimite,
Merci beaucoup pour ton retour, j'avais pensé à ça, mais je m'étais dit que ce devriendrais beaucoup trop complexe, mais finalement, ça va, merci beaucoup, je vais m'y atteler de suite, c'est une super idée la classe abstraite pour les inputs, je n'y avais pas songé. Je vais de ce pas tenter de creer un FormBuilder plus efficace!
Bonne journée.
Hey,
J'ai donc codé un FormBuilder comme me l'a suggéré Kaimite, voici à quoi cela ressemble, il me paraît plutôt pas mal et bien modulable et utilisable un peu à toutes les sauces.
Cette classe permet de crée le formulaire en lui-même
Cette classe va permettre de définir un style au formulaire, dans mon cas Bootstrap, il suffirais de crée une autre classe du même style, en changeant les mêmes fonctions que j'ai changé
Cette classe permet d'avoir des champs inputs plus généraux
Cette classe permet de crée un input de type Text. Dans mon FormBuilder, je crée une instance de ce type d'objet grâce au "type" de l'input, si c'est un type email, je crée une classe Email avec le type qui change.
Si c'est un textarea, je vais faire cela :
Et on peut en faire pleins comme ça ! C'est super, et surtout les mêttre à sa sauce. Je pense qu'il y a beaucoup de codes que j'aurais pu optimiser un peu mieux, beaucoup de codes redondants je trouve. J'aimerais avoir votre avis sur cela.
Voici un exemple de création de formulaire :
Ici, on crée un nouveau fomulaire de type Bootstrap qui va poster sur la route 'formbuilder', on peut lui ajouter des méthodes comme :
Par la suite, on ajoute au form des inputs grâce à la méthode add :
Voilà voilà, j'aimerais avoir des avis sur cela! Je pense que c'est beaucoup mieux que le premier aha ^^
Merci bien :p
Quand j'ai fait la mienne j'ai commencé par faire une classe de base :
Elle me sert a eviter de reprendre a chaque fois les setAttribute
et toutes mes autres classes etendent cette class.
Je ne suis pas sur que la méthode suivante soitr obligatoire.
Dans ma méthode addElement j'ai ça :
D'autre part si j'ai un champ qui est de type file je modifie automatiquement le enctype
Sinon j'ai utilise un template pour le rendu du champ. Je trouve ça plus simple.
Par exemple
$field->setTemplate('<div class="row"><div class="col-4-12">{{label}}</div><div class="col-8-12">{{input}}</div></div>');
Voilà !
Kaimite
Juste une petite remarque sur les label :
généralement on les lie à l'input par l'id mais si tu ne veux pas t'embéter avec l'id, tu peux encapsuler l'input dans le label
Hey,
J'aime bien comment tu as fait Kaimite, c'est vrai que je pourrais pousser le truc un peu plus loin. Je verrais avec une utilisation réelle du formbuilder qu'est-ce que j'ai besoin ou pas.
Merci Huggy, je ne savais pas du tout que l'on pouvais faire ça ! Ca évite de se faire chier avec l'id aha !