Нужно указать значение слагаемого поля как JDoe (для John Doe) в доктрине - PullRequest
0 голосов
/ 28 мая 2018

Как мне установить для поля слагов JDoe (J-первый символ имени, Doe - полная фамилия);

/**
 * @var string
 *
 * @Gedmo\Slug(fields={"firstName", "lastName"}, separator="??")
 * @ORM\Column(name="slug", type="string", length=20, unique=true)
 */

Спасибо!

1 Ответ

0 голосов
/ 28 мая 2018

Метод 1

Я не пробовал следующее, но это, вероятно, фрагмент, который вы ищете.попробуйте и дайте мне знать, если он работает:

class SomeEntity
{
    /**
     * @var string
     *
     * @Gedmo\Slug(fields={"getFirstNameSlugged", "lastName"}, separator="??")
     * @ORM\Column(name="slug", type="string", length=20, unique=true)
     */
    private $slug;

    private function getFirstNameFirstLetter()
    {
        return substr ($this->firstName, 0 , 1);
    }

    private function getFirstNameSlugged()
    {
        return ucfirst (getFirstNameFirstLetter());
    }

}

Метод 2

в вашем Сущности используйте метод setSlug():

class SomeEntity
{
    const SEPERATOR = '??';

    /**
     * @var string
     *
     * @Gedmo\Slug(fields={"firstName", "lastName"}, separator="??")
     * @ORM\Column(name="slug", type="string", length=20, unique=true)
     */
    private $slug;

    private function getFirstNameFirstLetter()
    {
        return substr ($this->firstName, 0 , 1);
    }

    private function getFirstNameSlugged()
    {
        return ucfirst (getFirstNameFirstLetter());
    }

    private function getLastNameSlugged()
    {
        return ucfirst ($this->getLastName());
    }

    public function setSlug()
    {
        $this->slug = $this->getFirstNameSlugged() . self::SEPERATOR . $this->getLastNameSlugged();

        return $this->slug;
    }
}

и в вашем контроллере :

$entity = new SomeEntity;
$entity->setSlug();

$em->persist($entity);
$em->flush();

метод 3

в вашей сущности , создайте метод и установите его в своем Контроллер :

class SomeEntity
{
    /**
     * @var string
     *
     * @Gedmo\Slug(fields={"firstName", "lastName"}, separator="??")
     * @ORM\Column(name="slug", type="string", length=20, unique=true)
     */
    private $slug;

    private function getFirstNameFirstLetter()
    {
        return substr ($this->firstName, 0 , 1);
    }

    private function getFirstNameSlugged()
    {
        return ucfirst (getFirstNameFirstLetter());
    }

    private function getLastNameSlugged()
    {
        return ucfirst ($this->getLastName());
    }

    public generateSlug()
    {
        $slug = $this->getFirstNameSlugged() . self::SEPERATOR . $this->getLastNameSlugged();

        return $slug;
    } 
}

и в вашем Контроллере :

$entity = new SomeEntity;

$callable = array('AppBundle\Entity\SomeEntity', 'generateSlug');
$sluggableListener = new \Gedmo\Sluggable\SluggableListener();
$sluggableListener->setTransliterator($callable);

$em->persist($entity);
$em->flush();
...