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
-~----------~----~----~----~------~----~------~--~---

Répondre à