Bonjour,

jusqu'à maintenant je pouvais ajouter une "Action" en base de donnée via la vue actions/add.ctp

mais maintenant pour chaque action je voudrais avoir la possibilité d'ajouter un materiel (0 ou plusieurs matériels) en relation avec l'action directement dans la même page.

Je passe actuellement par la vue materiels/add.ctp pour ajouter du matériel et je choisis l'id de l'action correspondant. mais ce n'est pas très pratique...
Plusieurs questions viennent à moi :

  • Il y a-t-il une solution pour réutiliser mon MaterielsController et son Model associé ou dois-je faire tout passer par ActionController, l'action add() et le model associé ?
  • Faut-il envoyer les 2 formulaires à des controllers différents ?
  • Comment palier aux problèmes de relations si j'enregistre un matériel avant l'action ?

Après avoir regardé sur le net je n'est toujours pas assimilé LA bonne pratique pour répondre à ce problème. c'est pourquoi je me tourne vers vous pour tenter de comprendre le bon processus à adopter.

Voici un schéma qui résume mon problème.

Cordialement,

Maxime

6 réponses


Salut Maxime,

Si tu as plusieurs table et que tu souhaite récupérer les champs de ta table matériels pour les utiliser dans le controller lié à ta table actions, tu dois établir des relations entre tes tables en utilisant les relations $hasMany, $belongsTo et $hasAndBelongsToMany que tu déclare dans ton Model Action...

Mes compétences s’arrêtant là et n'ayant pas non plus la connaissance de ton code, je ne peux pas te donner quelques chose de tout fait mais je te renvoi vers la formation de Graf' à se sujet.

J'espère que celà t'aideras!

Bon dèv'!

Salut et merci de ta réponse,

je comprend bien où tu veux en venir mais j'ai déjà fait mes liaisons mais là je pense que c'est un autre problème, car 2 formulaires sont sur la même page

Donc
Une Action concerne 0 ou plusieurs matériels, mais
Un Matériel appartient à UNE SEULE Action ?

Pour ma part je passe par AngularJS pour réaliser ça. Lors du POST, j'envoie toutes les informations des mes champs input en JSON, côté Controller, je crée un Objet que je merge avec l'existant si il y a un id dans le JSON. Ça marche bien et on est pas dépendant du système de CakePHP dans ces cas là.

Oui c'est bien ça amethyste...

prbaron : je ne connais pas du tout AngularJS mais après avoir regardé sur google, je me suis demandé si c'était possible avec Ajax de répondre à mon problème, sans passer par AngularJS

Oui bien sur, AngularJS n'est qu'une solution parmi d'autres. Tu peux le faire en pur JS ou en jQuery si tu en as envie. Tu peux passer par EmberJS ou BackboneJs, .... .