Symfony 3 модифицирует аннотацию к слагу gedmo - PullRequest
0 голосов
/ 05 октября 2018

У меня есть поле в моей сущности:

/**
  * slug field
  *
  * @Gedmo\Slug(fields={"name"})
  * @ORM\Column(type="string", length=255, unique=true)
  *
  * @var string
  */
 private $slug;

Теперь я хочу изменить это поле, чтобы сделать слаг из двух полей.

/**
  * slug field
  *
  * @Gedmo\Slug(fields={"id", "name"})
  * @ORM\Column(type="string", length=255, unique=true)
  *
  * @var string
  */
  private $slug;

Но при сохранении это меняет егодо сих пор делает слизняк только из поля "имя".Как сохранить эту аннотацию изменений?

1 Ответ

0 голосов
/ 05 октября 2018

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

<?php
namespace AppBundle\Command;

use AppBundle\Entity\YourEntityClass;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;

/**
 * Generates slugs again
 */
class UpdateSlugsCommand extends ContainerAwareCommand
{
    protected function configure()
    {
        $this
            ->setName('appbundle:update-slugs')
            ->setDescription('generate new slugs')
            ->setHelp('needed after changing the config');
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $em = $this->getContainer()->get('doctrine')->getEntityManager();

        $entities = $em->getRepository(YourEntityClass::class)->findAll();
        foreach ($entities as $entity) {
            // unset slug to generate a new one
            $entity->setSlug(null);
            $em->persist($entity);
        }
        $em->flush();
    }
}
...