Bonjour, j'ai les pattes dans CakePHP tout se passe bien, mais j'ai un beforeSave() qui permet de me faire un slug et celui-ci retourne NULL s'il voit un accent.

Mon beforeSave() /Model/Post.php :

<?php
    public function beforeSave($options = array()) {
            $this->data$this->alias]'slug'] = Inflector::slug(strtolower($this->data$this->alias]'name']), '-');
        return true;
    }
?>

Mon PostController.php :

<?php
    public function add(){

        if(isset($this->request->data'Post'])) {
            $this->Post->create();
            $this->Post->save(array(
                'name' => $this->request->data'Post']'name'],
                'content' => $this->request->data'Post']'content']
            ), true, array('name', 'slug', 'content'));
        }
    }
?>

Mon add.ctp qui ne vous servira à rien :D

<h1>Ajouter un Post</h1>
<?= $this->Form->create('Post'); ?>
<?= $this->Form->input('name', array(
    'label' => 'Titre',
)); ?>
<?= $this->Form->input('content', array(
    'label' => 'Article',
    'style' => 'height: 200px;'
)); ?>
<?= $this->Form->end(array('label'  => 'Ajouter', 'class' => 'button')); ?>

Donc quand j'ajoute un name sans accent il ne me dit rien et fait l'ajout correctement. Et quand il y a un accent il gueule :

Error: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'slug' cannot be null

SQL Query: INSERT INTO cake.posts (name, content, created, slug) VALUES ('ô lol', 'zefzef', '2013-03-27 10:29:50', NULL)

Merci pour vos lumières :) .

4 réponses


Hotgeart
Auteur
Réponse acceptée

Bonjour,

Change rien mise à part que j'ai un :
Notice (8): Undefined index: slug [APP\Controller\PostsController.php, line 27]
En plus.

merci

EDIT:

En faisant comme ça ça à l'air de passer :

$this->Post->create();
$this->Post->save(array(
'name' => $this->request->data'Post']'name'],
'slug' => $this->request->data'Post']'slug'],
'content' => $this->request->data'Post']'content']
), true, array('name', 'slug', 'content'));

Keisuke
Réponse acceptée

Hi,

Pour le slug, je metterai le Inflector::slug() a l'intérieur du strtolower().
Car le strtolower() ne met pas en minuscule certain caractère accentué... Du coup, si le Inflector::slug() s'execute avant, tu es sur que tu n'as plus d'accent pour tout mettre en minuscule. De plus, le strtolower() ne traite pas en UTF-8 par défaut.

@+

Et si tu fais:

            $this->Post->create();
            $this->Post->save(array(
                'name'      => $this->request->data'Post']'name'],
                'content'   => $this->request->data'Post']'content'],
                'slug' => $this->request->data'Post']'slug']
            ), true, array('name', 'slug', 'content'));

Ça donne quoi?

Hotgeart
Auteur

Pas con si il me fait a nouveau le coup je metterai le Inflector::slug() à l'intérieur du strtolower() .

thx