Bonjour,

Comment créer le SLUG du title dans le beforeSave() que je connaissais dans cakephp 2 ?

J'ai essayer de suivre le book mais rien : http://book.cakephp.org/3.0/fr/orm/behaviors.html

4 réponses


agencep
Auteur
Réponse acceptée

Bonjour,

Justement c'est ce que j'ai fais ::

App\Controller

$contents = $this->Contents->patchEntity($contents,$this->request->data);
$contents->slug = $contents->setSlug($contents->title);

App\Model\Entity

use Cake\ORM\Behavior;
use Cake\Utility\Inflector;

public function initialize(array $config)
    {
        $this->addBehavior('Sluggable');
    }
    public  function setSlug($title)
    {
        return Inflector::slug(strtolower($title));
    }
Lartak
Réponse acceptée

Pour commencer, mets ton code dans la balise appropriée.
Ensuite, tu mélanges un peu tout là et tu ne respectes pas la doc de CakePHP, ça ne risque pas de fonctionner,.
Dans l'exemple donné via le lien que je t'ai fourni, c'est :

protected function _setTitle($title)
{
    $this->set('slug', Inflector::slug($title));
    return $title;
}

Et ton code n'y ressemble pas du tout.
Soit tu utilises Un Behavior, ou alors tu utilises un setter, mais tu ne fais pas les deux en même temps.
Surtout que le setter tu dois le faire sur le champ du titre et non du slug si tu suis l'exemple donné ci-dessus.
En plus de ça, il met son sujet résolu sur du code faux.

Bonjour.
Si tu veux, tu peux utiliser le Behavior que partage Xety : Xety/Cake3-Sluggable que tu peux installer facilement avec composer.
Ou alors, tu peux tout simplement faire ton slug avec un setter, tu as justement un exemple ici pour le slug : Accesseurs & Mutateurs.

agencep
Auteur

Bonjour @Lartak

si j'ai mis "Il a repondu à mon sujet" c'est que ça marche, donc pour moi j'ai répondu a ma propre question "Comment créer le SLUG du title dans le beforeSave() ".

Maintenant que tu expliques mieux comment faire, ça c'est bien de l'entreaide.