mirror of
https://github.com/kevinveenbirkenbach/infinito.git
synced 2025-01-09 14:07:25 +01:00
Optimized implementation of format types
This commit is contained in:
parent
f8138fb361
commit
66008bc309
@ -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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user