代码之家  ›  专栏  ›  技术社区  ›  pelkas13

Symfony 3修改slug gedmo注释

  •  0
  • pelkas13  · 技术社区  · 6 年前

    我的实体中有一个字段:

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

    现在我想修改这个字段,从两个字段生成slug。

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

    但当我保存这些更改时,它仍然只从字段“name”生成slug。如何保存此批注更改?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Vyctorya    6 年前

    您是否尝试过它是否适用于新实体?更改配置后,旧的slug不会自动更新。您必须取消设置所有现有实体的段塞,然后再次保存它们以生成新段塞。我使用了一个命令:

    <?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();
        }
    }