2011-06-23 2 views
1

Je travaille sur ma première application CodeIgniter et j'ai rencontré une certaine confusion concernant la gestion des données de publication.Validation de la forme de codeigniter pour modéliser la logique

Plus précisément, je comprends le rôle de $this->form_validation->set_rules(), et comment fonctionne set_value() pour repeupler les valeurs d'entrée lorsque la validation a échoué, mais ce que je ne peux pas comprendre est si $this->input->post est la même valeur que l'équivalent set_value.

Je comprends que la majorité des règles de validation aurait un résultat booléen, mais qu'en est-il de celles comme trim|htmlspecialchars - elles ont aussi l'avantage de préparer les données pour les requêtes db.

Donc dans mon modèle, puis-je accéder aux entrées après avoir été traitées par la bibliothèque de validation de formulaire, ou dois-je faire la préparation supplémentaire à l'intérieur du modèle directement sur $this->input->post('variable')?

Mon instinct me dit que je dois ajouter le traitement final comme htmlspecialchars juste avant le SQL dans le modèle, car il est vraiment une opération spécifique db (je ne voudrais pas & au lieu de & dans mes entrées de formulaire, mais je voudrais & dans la base de données). Incidemment, dans ma lecture, j'ai rencontré $this->validation->variable qui semble avoir été la réponse à ma question dans les versions précédentes de CI.

+0

Oui (set_value) ce serait la même valeur que ($ this-> entrée-> post) si vous utilisez pour faire une forme collante ou repopulation. Il est également utilisé pour remplir un formulaire de mise à jour avec des données provenant d'une base de données. – Brad

Répondre

1

Ils sont similaires, mais pas exactement identiques. Vous utiliserez $this->input->post('variable'); dans le contrôleur uniquement. Cette variable sera validée et nettoyée (si vous décidez de la nettoyer avec xss_clean ou d'appliquer d'autres fonctions de préparation).

set_value() ne doit être utilisé que dans les vues. Bien que cela ne soit pas essentiel, la valeur réelle de cette opération par opposition à l'utilisation de $this->input->post est que vous pouvez définir une valeur "par défaut" en tant que second paramètre qui est automatiquement utilisé si la valeur de poste est vide.

1

Comme mentionné set_value() est strictement pour le repeuplement des entrées de formulaire - rien d'autre. Par exemple, set_checkbox() va retourner quelque chose comme checked="checked" qui n'est évidemment pas ce que vous voulez envoyer à votre modèle.

Il est possible d'argumenter sur la manière dont la validation et la préparation d'entrée doivent être gérées, mais la plupart accepteront que cela soit fait dans le contrôleur.

Vous pouvez effectuer un traitement supplémentaire dans le modèle si vous le souhaitez, mais vous ne voulez généralement pas accéder au $_POST à partir du modèle - cela rend le modèle moins utile. Toutes les données ne viennent pas directement de l'utilisateur, il est donc préférable de préparer les données au préalable et de les envoyer en tant que nouveau tableau/objet au modèle. Le modèle ne devrait pas se préoccuper de l'origine des données.

Laissez la bibliothèque de validation de formulaire et processus couche de commande l'entrée utilisateur (ce qu'il est destiné à), et le modèle peut traiter les vous envoyer des données à lui.

+1

"Le modèle ne devrait pas se préoccuper de l'origine des données." Cela fait beaucoup de sens - merci! J'ai déplacé $ this-> input-> post hors de mon modèle et ai passé un tableau de données à la place du contrôleur. –

0

Developer

Je travaille à la fois le travail et cadre CakePHP codeignator. Je me sens la meilleure chose pour la validation des données cakephp. conjoint vous avez 8 champs formez-vous créer une validation dans le contrôleur avec le désignateur.Après validation tous les champs sont vides si vous remplissez 8 champs et par erreur 1 champs manquent puis après validation validation des données du codeigneur actualise la page et vide tous les champs.

mais en php gâteau juste validation des données dans le modèle opposé créer vous créez une validation de temps et utiliser quelques amincit lorsque vous appelez modèle puis appelez la validation exp: ajouter, modifier.

+0

Désolé, comment cela répond-t-il à la question? – mbinette

Questions connexes