Hello PHP France,
Avant de foncer tête baissée dans le code, je souhaiterais vous faire part d'une petite réflexion perso quant à la gestion des vues sous CI. Cette dernière fonctionne très bien lorsqu'il s'agit de transférer des données à une vue depuis le contrôleur, j'aime bien le principe simple. "Malheureusement" j'ai besoin de quelque chose d'un peu plus robuste :
Je gère des formulaires type tableau dans lesquels on peut ajouter/retirer des lignes. Pour éviter une redondance du code coté JS et PHP, lorsque je demande à ajouter une ligne, une requête AJAX est effectuée sur un contrôleur "ajax" et appelle une fonction load_view() renvoyant la vue correspondante. Il est possible de spécifier des paramètres dans la requête AJAX qui seront affichés dans la vue si existants dedans (bref me permettant de pré remplir certains champs de la vue à partir d'entrées utilisateur).
Cette vue représente une et une seule ligne, et l'ensemble décrit plus haut fonctionne bien tant que je n'ai pas besoin d'aller récupérer d'autres informations supplémentaires sur le serveur. Quand c'est le cas (imaginons qu'une cellule de la ligne retournée soit en fait une liste déroulante comportant des informations stockées en BDD), je n'ai pour l'heure pas de solution propre me permettant d'alimenter ces champs depuis mon controleur AJAX : lui ne fait que vérifier que la vue désirée existe, et la renvoie avec les éventuels paramètres "client".
Pour pallier à ça, j'ai d'abord pensé à ajouter un troisième paramètre à mes requêtes AJAX du style "remote_params" : on y trouverait des informations sur le modèle de données à charger, la fonction membre à appeller et les paramètres optionnels à y fournir. Reste que je n'aime pas trop laisser ce type d'appels coté clients, aussi j'ai écarté cette solution.
La deuxième solution consiste à implémenter un gestionnaire de vues. Lorsque je souhaite charger une vue, j'appelle une fonction remplaçant $this->load->view('foo', $bar); par une autre. Cette fonction est capable, pour un nom de vue donné, d'aller récupérer les informations nécessaires au bon chargement de la vue puis de charger la vue comme le fait le gestionnaire de vues de codeigniter.
Par exemple, supposons que j'aie besoin de la vue "ligne_tableau". Cette vue propose une liste déroulante sur des taux de change dont les informations sont chargées depuis la BDD, ainsi qu'une liste des pays, également présente en BDD. Ces deux informations sont accessibles via deux modèles : Devises_model et Pays_model, à l'aide des fonction getListeTxChange() et getListePays().
En demandant au gestionnaire de vues de me charger la vue "ligne_tableau", et en ayant au préalable indiqué dans un fichier de conf/BDD quels sont les modèles à charger pour récupérer les données, je serai capable de précharger ma vue avec les informations qu'il me manque. Cette technique me permet de garder générique mon contrôleur Ajax et sa fonction load_view, et me permettrait même d'alléger le code de mes contrôleurs en appelant le gestionnaire de vues lorsque c'est nécessaire.
Qu'en pensez vous ? Avez vous une meilleure idée ou bien même un nom de librairie faisant un job similaire ?
Merci de vos réponses !
