mirror of
				https://github.com/kevinveenbirkenbach/infinito.git
				synced 2025-10-31 17:29:04 +00:00 
			
		
		
		
	Optimized implementation of format types
This commit is contained in:
		| @@ -19,6 +19,7 @@ | ||||
|         "symfony/orm-pack": "*", | ||||
|         "symfony/process": "*", | ||||
|         "symfony/security-bundle": "*", | ||||
|         "symfony/serializer": "*", | ||||
|         "symfony/serializer-pack": "*", | ||||
|         "symfony/swiftmailer-bundle": "^3.1", | ||||
|         "symfony/translation": "*", | ||||
|   | ||||
							
								
								
									
										2
									
								
								application/composer.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										2
									
								
								application/composer.lock
									
									
									
										generated
									
									
									
								
							| @@ -4,7 +4,7 @@ | ||||
|         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", | ||||
|         "This file is @generated automatically" | ||||
|     ], | ||||
|     "content-hash": "d49903ff1dc85f65ca277d339dac5d5e", | ||||
|     "content-hash": "ba590f1add8e4ab85f0695854acb1a6d", | ||||
|     "packages": [ | ||||
|         { | ||||
|             "name": "doctrine/annotations", | ||||
|   | ||||
| @@ -6,8 +6,8 @@ use Symfony\Component\HttpFoundation\Response; | ||||
| use App\Entity\AbstractSource; | ||||
| use Symfony\Component\Routing\Annotation\Route; | ||||
| use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; | ||||
| use App\Source\TemplateGenerator; | ||||
| use Symfony\Component\HttpFoundation\Request; | ||||
| use App\Source\Generator\StringGenerator; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
| @@ -29,8 +29,8 @@ class SourceController extends AbstractController | ||||
|         if (!$source) { | ||||
|             throw $this->createNotFoundException('No source found for id '.$id); | ||||
|         } | ||||
|         $templateGenerator = new TemplateGenerator($source, $request); | ||||
|         $templateGenerator = new StringGenerator($request, $source, $this->container->get('twig')); | ||||
|  | ||||
|         return $this->render($templateGenerator->getTemplatePath(), ['source' => $source]); | ||||
|         return new Response($templateGenerator->render()); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -23,5 +23,6 @@ class AbstractEntity | ||||
|  | ||||
|     protected function __construct() | ||||
|     { | ||||
|         $this->id = 0; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -2,8 +2,8 @@ | ||||
|  | ||||
| namespace App\Entity\Attribut; | ||||
|  | ||||
| use Doctrine\Common\Collections\ArrayCollection; | ||||
| use App\Entity\NodeInterface; | ||||
| use Doctrine\Common\Collections\Collection; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
| @@ -19,16 +19,16 @@ trait ChildsAttribut | ||||
|      *      inverseJoinColumns={@ORM\JoinColumn(name="node_id", referencedColumnName="id")} | ||||
|      *      ) | ||||
|      * | ||||
|      * @var ArrayCollection|NodeInterface[] | ||||
|      * @var Collection|NodeInterface[] | ||||
|      */ | ||||
|     protected $childs; | ||||
|  | ||||
|     public function getChilds(): ArrayCollection | ||||
|     public function getChilds(): Collection | ||||
|     { | ||||
|         return $this->getChilds(); | ||||
|         return $this->childs; | ||||
|     } | ||||
|  | ||||
|     public function setChilds(ArrayCollection $childs): void | ||||
|     public function setChilds(Collection $childs): void | ||||
|     { | ||||
|         $this->childs = $childs; | ||||
|     } | ||||
|   | ||||
| @@ -2,14 +2,14 @@ | ||||
|  | ||||
| namespace App\Entity\Attribut; | ||||
|  | ||||
| use Doctrine\Common\Collections\ArrayCollection; | ||||
| use Doctrine\Common\Collections\Collection; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
|  */ | ||||
| interface ChildsAttributeInterface | ||||
| { | ||||
|     public function setChilds(ArrayCollection $childs): void; | ||||
|     public function setChilds(Collection $childs): void; | ||||
|  | ||||
|     public function getChilds(): ArrayCollection; | ||||
|     public function getChilds(): Collection; | ||||
| } | ||||
|   | ||||
| @@ -2,8 +2,8 @@ | ||||
|  | ||||
| namespace App\Entity\Attribut; | ||||
|  | ||||
| use Doctrine\Common\Collections\ArrayCollection; | ||||
| use App\Entity\NodeInterface; | ||||
| use Doctrine\Common\Collections\Collection; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
| @@ -19,16 +19,16 @@ trait ParentsAttribut | ||||
|      *      inverseJoinColumns={@ORM\JoinColumn(name="node_id", referencedColumnName="id")} | ||||
|      *      ) | ||||
|      * | ||||
|      * @var ArrayCollection|NodeInterface[] | ||||
|      * @var Collection|NodeInterface[] | ||||
|      */ | ||||
|     protected $parents; | ||||
|  | ||||
|     public function getParents(): ArrayCollection | ||||
|     public function getParents(): Collection | ||||
|     { | ||||
|         return $this->parents; | ||||
|     } | ||||
|  | ||||
|     public function setParents(ArrayCollection $parents): void | ||||
|     public function setParents(Collection $parents): void | ||||
|     { | ||||
|         $this->parents = $parents; | ||||
|     } | ||||
|   | ||||
| @@ -2,14 +2,14 @@ | ||||
|  | ||||
| namespace App\Entity\Attribut; | ||||
|  | ||||
| use Doctrine\Common\Collections\ArrayCollection; | ||||
| use Doctrine\Common\Collections\Collection; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
|  */ | ||||
| interface ParentsAttributInterface | ||||
| { | ||||
|     public function setParents(ArrayCollection $parents): void; | ||||
|     public function setParents(Collection $parents): void; | ||||
|  | ||||
|     public function getParents(): ArrayCollection; | ||||
|     public function getParents(): Collection; | ||||
| } | ||||
|   | ||||
| @@ -2,8 +2,8 @@ | ||||
|  | ||||
| namespace App\Entity\Attribut; | ||||
|  | ||||
| use Doctrine\Common\Collections\ArrayCollection; | ||||
| use App\Entity\PermissionInterface; | ||||
| use Doctrine\Common\Collections\Collection; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
| @@ -11,16 +11,16 @@ use App\Entity\PermissionInterface; | ||||
| trait PermissionsAttribut | ||||
| { | ||||
|     /** | ||||
|      * @var ArrayCollection | ||||
|      * @var Collection | ||||
|      */ | ||||
|     protected $permissions; | ||||
|  | ||||
|     public function setPermissions(ArrayCollection $permissions): void | ||||
|     public function setPermissions(Collection $permissions): void | ||||
|     { | ||||
|         $this->permissions = $permissions; | ||||
|     } | ||||
|  | ||||
|     public function getPermissions(): ArrayCollection | ||||
|     public function getPermissions(): Collection | ||||
|     { | ||||
|         return $this->permissions; | ||||
|     } | ||||
|   | ||||
| @@ -2,17 +2,17 @@ | ||||
|  | ||||
| namespace App\Entity\Attribut; | ||||
|  | ||||
| use Doctrine\Common\Collections\ArrayCollection; | ||||
| use App\Entity\PermissionInterface; | ||||
| use Doctrine\Common\Collections\Collection; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
|  */ | ||||
| interface PermissionsAttributInterface | ||||
| { | ||||
|     public function setPermissions(ArrayCollection $permissions): void; | ||||
|     public function setPermissions(Collection $permissions): void; | ||||
|  | ||||
|     public function getPermissions(): ArrayCollection; | ||||
|     public function getPermissions(): Collection; | ||||
|  | ||||
|     public function addPermission(PermissionInterface $permission): void; | ||||
| } | ||||
|   | ||||
| @@ -21,6 +21,6 @@ trait RightAttribut | ||||
|  | ||||
|     public function getRight(): RightInterface | ||||
|     { | ||||
|         return $this->getRight(); | ||||
|         return $this->right; | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -2,14 +2,14 @@ | ||||
|  | ||||
| namespace App\Entity\Attribut; | ||||
|  | ||||
| use Doctrine\Common\Collections\ArrayCollection; | ||||
| use Doctrine\Common\Collections\Collection; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
|  */ | ||||
| interface RightsAttributInterface | ||||
| { | ||||
|     public function setRights(ArrayCollection $rights): void; | ||||
|     public function setRights(Collection $rights): void; | ||||
|  | ||||
|     public function getRights(): ArrayCollection; | ||||
|     public function getRights(): Collection; | ||||
| } | ||||
|   | ||||
| @@ -2,7 +2,7 @@ | ||||
|  | ||||
| namespace App\Entity\Attribut; | ||||
|  | ||||
| use Doctrine\Common\Collections\ArrayCollection; | ||||
| use Doctrine\Common\Collections\Collection; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
| @@ -10,16 +10,16 @@ use Doctrine\Common\Collections\ArrayCollection; | ||||
| trait RightsAttribute | ||||
| { | ||||
|     /** | ||||
|      * @var ArrayCollection | ||||
|      * @var Collection | ||||
|      */ | ||||
|     protected $rights; | ||||
|  | ||||
|     public function setRights(ArrayCollection $rights): void | ||||
|     public function setRights(Collection $rights): void | ||||
|     { | ||||
|         $this->rights = $rights; | ||||
|     } | ||||
|  | ||||
|     public function getRights(): ArrayCollection | ||||
|     public function getRights(): Collection | ||||
|     { | ||||
|         return $this->rights; | ||||
|     } | ||||
|   | ||||
| @@ -18,7 +18,7 @@ class Law extends AbstractEntity implements LawInterface | ||||
|     use RightsAttribute, NodeAttribut; | ||||
|  | ||||
|     /** | ||||
|      * @ORM\OneToMany(targetEntity="Right", mappedBy="id", cascade={"persist", "remove"}) | ||||
|      * @ORM\OneToMany(targetEntity="Right", mappedBy="law", cascade={"persist", "remove"}) | ||||
|      * | ||||
|      * @var ArrayCollection | ||||
|      */ | ||||
|   | ||||
| @@ -43,7 +43,7 @@ class Permission extends AbstractEntity implements PermissionInterface | ||||
|     protected $node; | ||||
|  | ||||
|     /** | ||||
|      * @ORM\ManyToOne(targetEntity="Right") | ||||
|      * @ORM\ManyToOne(targetEntity="Right",inversedBy="permissions") | ||||
|      * @ORM\JoinColumn(name="right_id", referencedColumnName="id") | ||||
|      * | ||||
|      * @var RightInterface | ||||
|   | ||||
| @@ -9,6 +9,7 @@ use Doctrine\ORM\Mapping as ORM; | ||||
| use Fresh\DoctrineEnumBundle\Validator\Constraints as DoctrineAssert; | ||||
| use App\Entity\Attribut\LawAttribut; | ||||
| use App\Entity\Attribut\PermissionsAttribut; | ||||
| use Doctrine\Common\Collections\Collection; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
| @@ -20,7 +21,7 @@ class Right extends AbstractEntity implements RightInterface | ||||
|     use TypeAttribut,LawAttribut,PermissionsAttribut; | ||||
|  | ||||
|     /** | ||||
|      * @ORM\ManyToOne(targetEntity="Law") | ||||
|      * @ORM\ManyToOne(targetEntity="Law", inversedBy="rights") | ||||
|      * @ORM\JoinColumn(name="law_id", referencedColumnName="id") | ||||
|      * | ||||
|      * @var LawInterface | ||||
| @@ -36,9 +37,9 @@ class Right extends AbstractEntity implements RightInterface | ||||
|     protected $type; | ||||
|  | ||||
|     /** | ||||
|      * @ORM\OneToMany(targetEntity="Permission", mappedBy="id", cascade={"persist", "remove"}) | ||||
|      * @ORM\OneToMany(targetEntity="Permission", mappedBy="right", cascade={"persist", "remove"}) | ||||
|      * | ||||
|      * @var ArrayCollection | ||||
|      * @var Collection | ||||
|      */ | ||||
|     protected $permissions; | ||||
|  | ||||
|   | ||||
							
								
								
									
										28
									
								
								application/src/Source/Generator/AbstractGenerator.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								application/src/Source/Generator/AbstractGenerator.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| <?php | ||||
|  | ||||
| namespace App\Source\Generator; | ||||
|  | ||||
| use App\Entity\SourceInterface; | ||||
| use Symfony\Component\HttpFoundation\Request; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
|  */ | ||||
| abstract class AbstractGenerator | ||||
| { | ||||
|     /** | ||||
|      * @var SourceInterface | ||||
|      */ | ||||
|     protected $source; | ||||
|  | ||||
|     /** | ||||
|      * @var Request | ||||
|      */ | ||||
|     protected $request; | ||||
|  | ||||
|     public function __construct(Request $request, SourceInterface $source) | ||||
|     { | ||||
|         $this->source = $source; | ||||
|         $this->request = $request; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										36
									
								
								application/src/Source/Generator/SerializeGenerator.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								application/src/Source/Generator/SerializeGenerator.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| <?php | ||||
|  | ||||
| namespace App\Source\Generator; | ||||
|  | ||||
| use Symfony\Component\Serializer\Encoder\XmlEncoder; | ||||
| use Symfony\Component\Serializer\Encoder\YamlEncoder; | ||||
| use Symfony\Component\Serializer\Encoder\JsonEncoder; | ||||
| use Symfony\Component\Serializer\Encoder\CsvEncoder; | ||||
| use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; | ||||
| use Symfony\Component\Serializer\Serializer; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
|  */ | ||||
| final class SerializeGenerator extends AbstractGenerator | ||||
| { | ||||
|     const SERIALIZABLE_FORMATS = [ | ||||
|         'xml', | ||||
|         'json', | ||||
|         'csv', | ||||
|         'yaml', | ||||
|     ]; | ||||
|  | ||||
|     public function serialize(): string | ||||
|     { | ||||
|         $encoders = [new XmlEncoder(), new JsonEncoder(), new YamlEncoder(), new CsvEncoder()]; | ||||
|         $normalizer = new ObjectNormalizer(); | ||||
|         $normalizer->setCircularReferenceLimit(0); | ||||
|         $normalizer->setCircularReferenceHandler(function ($object) { | ||||
|             return $object->getId(); | ||||
|         }); | ||||
|         $serializer = new Serializer([$normalizer], $encoders); | ||||
|  | ||||
|         return $serializer->serialize($this->source, $this->request->getRequestFormat()); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										35
									
								
								application/src/Source/Generator/StringGenerator.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								application/src/Source/Generator/StringGenerator.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| <?php | ||||
|  | ||||
| namespace App\Source\Generator; | ||||
|  | ||||
| use Symfony\Component\HttpFoundation\Request; | ||||
| use App\Entity\SourceInterface; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
|  */ | ||||
| final class StringGenerator extends AbstractGenerator | ||||
| { | ||||
|     /** | ||||
|      * @var \Twig_Environment | ||||
|      */ | ||||
|     protected $twig; | ||||
|  | ||||
|     public function __construct(Request $request, SourceInterface $source, \Twig_Environment $twig) | ||||
|     { | ||||
|         parent::__construct($request, $source); | ||||
|         $this->twig = $twig; | ||||
|     } | ||||
|  | ||||
|     public function render(): string | ||||
|     { | ||||
|         if (in_array($this->request->getRequestFormat(), SerializeGenerator::SERIALIZABLE_FORMATS)) { | ||||
|             $serializeGenerator = new SerializeGenerator($this->request, $this->source); | ||||
|  | ||||
|             return $serializeGenerator->serialize(); | ||||
|         } | ||||
|         $templateGenerator = new TemplateGenerator($this->request, $this->source, $this->twig); | ||||
|  | ||||
|         return $templateGenerator->render(); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										44
									
								
								application/src/Source/Generator/TemplateGenerator.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								application/src/Source/Generator/TemplateGenerator.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,44 @@ | ||||
| <?php | ||||
|  | ||||
| namespace App\Source\Generator; | ||||
|  | ||||
| use App\Entity\SourceInterface; | ||||
| use Symfony\Component\HttpFoundation\Request; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
|  */ | ||||
| final class TemplateGenerator extends AbstractGenerator | ||||
| { | ||||
|     const SOURCE_TEMPLATE_ROOT = 'source'; | ||||
|  | ||||
|     /** | ||||
|      * @var \Twig_Environment | ||||
|      */ | ||||
|     protected $twig; | ||||
|  | ||||
|     public function __construct(Request $request, SourceInterface $source, \Twig_Environment $twig) | ||||
|     { | ||||
|         parent::__construct($request, $source); | ||||
|         $this->twig = $twig; | ||||
|     } | ||||
|  | ||||
|     public function render(): string | ||||
|     { | ||||
|         return $this->twig->render($this->getTemplatePath(), ['source' => $this->source]); | ||||
|     } | ||||
|  | ||||
|     private function getTemplatePath(): string | ||||
|     { | ||||
|         return self::SOURCE_TEMPLATE_ROOT.'/'.$this->generateName().'.'.$this->request->getRequestFormat().'.twig'; | ||||
|     } | ||||
|  | ||||
|     private function generateName(): string | ||||
|     { | ||||
|         $reflection = new \ReflectionClass($this->source); | ||||
|         $shortName = $reflection->getShortName(); | ||||
|         $lowerName = strtolower($shortName); | ||||
|  | ||||
|         return str_replace('source', '', $lowerName); | ||||
|     } | ||||
| } | ||||
| @@ -1,50 +0,0 @@ | ||||
| <?php | ||||
|  | ||||
| namespace App\Source; | ||||
|  | ||||
| use App\Entity\SourceInterface; | ||||
| use Symfony\Component\HttpFoundation\Request; | ||||
|  | ||||
| /** | ||||
|  * @author kevinfrantz | ||||
|  */ | ||||
| class TemplateGenerator | ||||
| { | ||||
|     const SOURCE_TEMPLATE_ROOT = 'source'; | ||||
|  | ||||
|     /** | ||||
|      * @var SourceInterface | ||||
|      */ | ||||
|     protected $source; | ||||
|  | ||||
|     /** | ||||
|      * @var Request | ||||
|      */ | ||||
|     protected $request; | ||||
|  | ||||
|     /** | ||||
|      * @var string | ||||
|      */ | ||||
|     protected $format; | ||||
|  | ||||
|     public function __construct(SourceInterface $source, Request $request) | ||||
|     { | ||||
|         $this->source = $source; | ||||
|         $this->request = $request; | ||||
|         $this->format = $this->request->getRequestFormat(); | ||||
|     } | ||||
|  | ||||
|     public function getTemplatePath(): string | ||||
|     { | ||||
|         return self::SOURCE_TEMPLATE_ROOT.'/'.$this->generateName().'.'.$this->format.'.twig'; | ||||
|     } | ||||
|  | ||||
|     private function generateName(): string | ||||
|     { | ||||
|         $reflection = new \ReflectionClass($this->source); | ||||
|         $shortName = $reflection->getShortName(); | ||||
|         $lowerName = strtolower($shortName); | ||||
|  | ||||
|         return str_replace('source', '', $lowerName); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user