/**
  * Generate update the page parameters with the entity.
  *
  * @param BusinessTemplate $businessTemplate
  * @param mixed            $entity
  * @param EntityManager    $em
  *
  * @return VirtualBusinessPage
  */
 public function generateEntityPageFromTemplate(BusinessTemplate $businessTemplate, $entity, EntityManager $em)
 {
     $page = new VirtualBusinessPage();
     $currentLocale = $businessTemplate->getCurrentLocale();
     $reflect = new \ReflectionClass($businessTemplate);
     $templateProperties = $reflect->getProperties();
     $accessor = PropertyAccess::createPropertyAccessor();
     foreach ($templateProperties as $property) {
         if (!in_array($property->getName(), ['id', 'widgetMap', 'slots', 'seo', 'i18n', 'widgets', 'translations']) && !$property->isStatic()) {
             $value = $accessor->getValue($businessTemplate, $property->getName());
             $setMethod = 'set' . ucfirst($property->getName());
             if (method_exists($page, $setMethod)) {
                 $accessor->setValue($page, $property->getName(), $value);
             }
         }
     }
     //find Victoire\Bundle\BusinessEntityBundle\Entity\BusinessEntity object according to the given $entity
     $businessEntity = $this->businessEntityHelper->findByEntityInstance($entity);
     if ($businessEntity !== null) {
         //the business properties usable in a url
         $businessProperties = $this->getBusinessProperties($businessEntity);
         $entityProxy = $this->entityProxyProvider->getEntityProxy($entity, $businessEntity, $em);
         $page->setEntityProxy($entityProxy);
         $page->setTemplate($businessTemplate);
         /*
          * Returns class and parent's uses
          *
          * @param $class
          * @param bool $autoload
          * @return array
          */
         $class_uses_deep = function ($class, $autoload = true) {
             $traits = [];
             do {
                 $traits = array_merge(class_uses($class, $autoload), $traits);
             } while ($class = get_parent_class($class));
             foreach ($traits as $trait => $same) {
                 $traits = array_merge(class_uses($trait, $autoload), $traits);
             }
             return array_unique($traits);
         };
         $isTranslatableEntity = in_array(Translatable::class, $class_uses_deep($entity));
         foreach ($businessTemplate->getTranslations() as $translation) {
             if ($isTranslatableEntity) {
                 $entity->setCurrentLocale($translation->getLocale());
             }
             $page->setCurrentLocale($translation->getLocale());
             $businessTemplate->setCurrentLocale($translation->getLocale());
             $page = $this->populatePage($page, $businessTemplate, $businessProperties, $em, $entity);
         }
         if ($isTranslatableEntity) {
             $entity->setCurrentLocale($currentLocale);
         }
         $page->setCurrentLocale($currentLocale);
         $businessTemplate->setCurrentLocale($currentLocale);
         if ($seo = $businessTemplate->getSeo()) {
             $pageSeo = clone $seo;
             $page->setSeo($pageSeo);
         }
     }
     return $page;
 }