Concernant l'unicité, un simple règle de validation "unique" devrait suffir. Sinon model::isUnique($field) suivi d'un model::invalidate() depuis le beforeSave.
Concernant l'erreur SQL, il existe une propriété $error dans datasource, et implémentée dans certaines Dbo, à voir donc. http://api.cakephp.org/class_data_source.html#a9da6a9fce3eed879fc088ad61edc758 On Jun 16, 4:29 pm, avairet <[EMAIL PROTECTED]> wrote: > Bonjour Marc, > > Voilà comment intercepter des erreurs SQL pour afficher des messages > compréhensibles à tes utilisateurs si ton niveau de debug est à 0 : > > public function onError() > { > if(Configure::read('debug') < 1) > { > // Afficher une page d'erreur : > $this->requestAction('/pages/db_fatal_error'); > } > exit; > } > > A mettre dans "app/app_controller.php" et bien entendu, il faut créer > la vue "db_fatal_error" et la mettre au bon endroit ! > > Ensuite, pour les requêtes custom ne pas utiliser "execute()" qui est > dépréciée, mais seulement "query()". > Mais je ne sais pas trop comment récupérer le code d'erreur SQL pour > pouvoir personnaliser le message. > > Toutefois, habituellement, dans Cake on fait : > > --------------------------------------------------------- > if ($this->Model->save($this->data)) { > // Traitement en cas de succès} > > else { > // Message d'erreur} > > -------------------------------------------------------- > > Tu peux donc faire aussi : > > ------------------------------------------------------------ > if ($this->Model->query('ma_query')) { > // Traitement en cas de succès} > > else { > // Message d'erreur} > > ------------------------------------------------------------- > > Après je pense qu'il doit y avoir une manière de récupérer le message > d'erreur SQL via une méthode de modèle, mais j'ai pas cherché... > > En tout cas, une chose est sûre : tu dois mettre tes contraintes dans > la base ! > > On 16 juin, 11:13, Marc MENDEZ <[EMAIL PROTECTED]> wrote: > > > Bonjour, > > > J'avais trouvé une discussion sur le forum cakePHP anglais concernant > > l'interception des erreurs SQL, mais la conversation a viré au règlement > > de compte et aux us et coutumes sur Internet... > > > Donc, voici ma question : > > > Comment traiter efficacement l'unicité d'une information. Les exemples > > que j'ai pu trouver font, en gros, un findByxxxx pour vérifier que > > l'élément n'existe pas déjà dans la base de données avant de l'insérer > > ou de la mettre à jour. > > Ce système est bien entendu limité, car, la probabilité, sur certains > > informations, qu'au moins deux utilisateurs saisissent la même au même > > moment, n'est pas mince. Surtout suivant certaines informations. > > Donc, si on met en place des contraintes d'unicité dans la BDD > > (éventuellement en complément de l'autre solution), comment intercepter > > **proprement** les erreurs Sql ? > > > J'en viens donc également à la deuxième partie du sujet de cette > > discussion : si je suis amené à utiliser les query() et autre execute(), > > comment traiter proprement les erreurs SQL retournées ? Par proprement, > > j'entends que certaines erreurs, prévisibles, doivent être interceptées > > par l'application et être affiché à l'utilisateur en clair clair. > > > Merci --~--~---------~--~----~------------~-------~--~----~ Groupe "Cakephp-fr". Adresse : [email protected] Pour résilier : [EMAIL PROTECTED] Pour les options : http://groups.google.com/group/cakephp-fr?hl=fr -~----------~----~----~----~------~----~------~--~---
