Bonjour à tous. j'ai un petit soucis avec Cake PHP je m'explique : j'ai un petit formulaire avec 2 champs - titre et - contenu, j'utilise la variable validate dans mon model pour gérer les erreurs. Mon probléme : la verification est bien pris en compte mais j'ai aucun affichage des mes erreurs Model : [code] class Post extends AppModel { public $validate = array( 'titre' => 'notEmpty' ); } [/code] Controller : [code] class PostsController extends AppController{ public function admin_add(){ /* Si ajout en BDD */ if($this->request->is('post')){ $slug = Inflector::slug($this->request->data['posts']['titre'],'-'); $verif = $this->Post->get($slug); if(empty($verif)){ $this->Post->create(array( 'titre' => $this->request->data['posts']['titre'], 'slug' => strtolower($slug), 'contenu' => $this->request->data['posts']['contenu'] )); $this->Post->save($this->request->data); } } $this->layout = 'admin'; } } [/code] La vue : [code]<?php echo $this->Form->create('posts'); echo $this->Form->input('titre',array('label' =>'Titre')); echo $this->Form->input('contenu',array('label' => 'Contenu', 'type' => 'textarea')); echo $this->Form->end('Enregistrer'); ?> [/code] Le layout : [code]<?php echo $this->Form->create('posts'); echo $this->Form->input('titre',array('label' =>'Titre')); echo $this->Form->input('contenu',array('label' => 'Contenu', 'type' => 'textarea')); echo $this->Form->end('Enregistrer'); ?> le layout : [code]

<meta charset="utf-8"><title>
<?php echo $this->fetch('title'); ?></title><?php echo $this->Html->css('admin/reset'); echo $this->Html->css('admin/template'); echo $this->Html->meta('favicon.ico','/favicon.ico',array('type' => 'icon')); echo $this->fetch('css'); ?> <link href="http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,800,700,600" rel="stylesheet" type="text/css">

<?php echo $this->element('admin/menu'); ?>

<?php echo $this->fetch('headerTitre'); ?>

<?php echo $this->fetch('contentTop'); ?>

<?php echo $this->fetch('sidebarLeft'); ?> <?php echo $this->fetch('content'); ?> <?php echo $this->fetch('sidebarRight'); ?>

<?php echo $this->fetch('script'); ?> [/code]

2 réponses


Lartak
Réponse acceptée

Bonjour.
Je crois que tu as raté quelques points sur CakePHP, je te conseille de vérifier la doc.
Pour commencer, si tu veux un message d'erreur de validation, il te faut faire par exemple, comme ceci :

public $validate = array(
    'titre' => array(
        'rule' => 'notEmpty', 
        'message' => 'Veuillez renseigner ce champ'
    )
);

Ensuite, ce n'est pas :

$this->request->data'posts']

mais :

$this->request->data'Post']

C'est le nom du modèle et non le nom du controlleur.
À quoi se réfère ton :

$this->Post->get

cette ligne ne sert à rien et enlèves ta condition, fais plutôt un beforeSave dans ton modèle avec du code pour ton slug.
Si tu renseignes les données à enregistrer en base de données dans ton create, il est inutile de faire un :

$this->request->data

dans ton save, c'est comme si tu n'avais rien fait dans ton create, autant faire :

$this->Post->create();
$this->Post->save(array(
    'titre' => $this->request->data'Post']'titre'], 
    'slug' => strtolower($slug), 
    'contenu' => $this->request->data'Post']'contenu']
    )
);

Pour finir, pareil pour le create, ce n'est pas :

$this->Form->create('posts')

mais

$this->Form->create('Post')

Le nom du modèle et non le nom du controller.

Super, merci pour ra réponse, ça règle effectivement mon ( mes ? ) problème(s) :)