Optimized view management

This commit is contained in:
Kevin Frantz 2019-03-28 15:15:53 +01:00
parent 8072935ed1
commit 326390e7af
5 changed files with 117 additions and 15 deletions

View File

@ -1,5 +1,4 @@
<?php
namespace Infinito\Domain\ViewManagement;
use FOS\RestBundle\View\View;
@ -7,61 +6,108 @@ use Infinito\Domain\RequestManagement\Action\RequestedActionInterface;
use Infinito\Domain\ActionManagement\ActionServiceInterface;
use Infinito\Domain\ActionManagement\ActionFactoryServiceInterface;
use Infinito\Domain\TemplateManagement\TemplateNameServiceInterface;
use Infinito\Domain\ParameterManagement\OptionalGetParameterService;
use Infinito\Domain\ParameterManagement\OptionalGetParameterServiceInterface;
/**
*
* @author kevinfrantz
*/
final class ViewBuilder implements ViewBuilderInterface
{
/**
*
* @var string The path to the atom entity template
*/
const TWIG_ENTITY_ATOM_TEMPLATE_PATH = 'entity/_entity.html.twig';
/**
*
* @var string The path to the molecule entity template
*/
const TWIG_ENTITY_MOLECULE_TEMPLATE_PATH = 'entity/entity.html.twig';
/**
*
* @var View
*/
private $view;
/**
*
* @var RequestedActionInterface
*/
private $actionService;
/**
*
* @var ActionFactoryServiceInterface
*/
private $actionFactoryService;
/**
*
* @var TemplateNameServiceInterface
*/
private $templateNameService;
/**
*
* @var OptionalGetParameterServiceInterface
*/
private $optionalGetParameterService;
/**
* Containes the routine to decide if the template should be loaded with or without frame
*
* @return bool
*/
private function checkLoadWithFrame(): bool
{
if ($this->optionalGetParameterService->hasParameter(OptionalGetParameterServiceInterface::FRAME_PARAMETER)) {
return $this->optionalGetParameterService->getParameter(OptionalGetParameterServiceInterface::FRAME_PARAMETER);
}
return true;
}
/**
* Don't know if this function will be usefull in the future.
* Feel free to remove it if this should not be the case.
*
* @todo Implement tests
*
*
* @return string The general entity template or a individual template if it is set
*/
private function getTemplate(): string
{
if ($this->templateNameService->doesMoleculeTemplateExist()) {
return $this->templateNameService->getMoleculeTemplateName();
if ($this->checkLoadWithFrame()) {
if ($this->templateNameService->doesMoleculeTemplateExist()) {
return $this->templateNameService->getMoleculeTemplateName();
}
return self::TWIG_ENTITY_MOLECULE_TEMPLATE_PATH;
}
return self::TWIG_ENTITY_TEMPLATE_PATH;
if ($this->templateNameService->doesAtomTemplateExist()) {
return $this->templateNameService->getAtomTemplateName();
}
return self::TWIG_ENTITY_ATOM_TEMPLATE_PATH;
}
/**
* @param ActionServiceInterface $actionService
*
* @param ActionServiceInterface $actionService
* @param ActionFactoryServiceInterface $actionFactoryService
*/
public function __construct(ActionServiceInterface $actionService, ActionFactoryServiceInterface $actionFactoryService, TemplateNameServiceInterface $templateNameService)
public function __construct(ActionServiceInterface $actionService, ActionFactoryServiceInterface $actionFactoryService, TemplateNameServiceInterface $templateNameService, OptionalGetParameterServiceInterface $optionalGetParameterService)
{
$this->view = View::create();
$this->actionService = $actionService;
$this->templateNameService = $templateNameService;
$this->optionalGetParameterService = $optionalGetParameterService;
}
/**
*
* @return View
*/
public function getView(): View
@ -73,6 +119,7 @@ final class ViewBuilder implements ViewBuilderInterface
}
/**
*
* {@inheritdoc}
*
* @see \Infinito\Domain\ViewManagement\ViewBuilderInterface::getActionService()
@ -83,6 +130,7 @@ final class ViewBuilder implements ViewBuilderInterface
}
/**
*
* {@inheritdoc}
*
* @see \Infinito\Domain\ViewManagement\ViewBuilderInterface::build()

View File

@ -10,11 +10,6 @@ use Infinito\Domain\ActionManagement\ActionServiceInterface;
*/
interface ViewBuilderInterface
{
/**
* @var string The path to the general entity template
*/
const TWIG_ENTITY_TEMPLATE_PATH = 'entity/entity.html.twig';
/**
* @return View
*/

View File

@ -1,4 +1,5 @@
<html>
<!DOCTYPE html>
<html lang="{{ app.request.locale }}">
<head>
<title>
{% block title %}infinito{% endblock %}

View File

@ -1,4 +1,4 @@
<table class="Table">
<table class="table">
<tr>
<th>{{'Attribut'|trans}}</th>
<th>{{'Value'|trans}}</th>

View File

@ -0,0 +1,58 @@
<?php
namespace Tests\Integration\Domain\ViewManagement;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
/**
*
* @author kevinfrantz
*
*/
class ViewBuilderIntegrationTest extends WebTestCase
{
public function testHomepageFrameless(): void
{
$client = static::createClient();
$client->request(Request::METHOD_GET, 'api/rest/source/HOMEPAGE.html?frame=0');
$this->assertEquals(200, $client->getResponse()->getStatusCode());
$xml = @simplexml_load_string($client->getResponse()->getContent());
$this->assertFalse($xml);
}
public function testHomepageFrameWithoutParameter(): void
{
$client = static::createClient();
$client->request(Request::METHOD_GET, 'api/rest/source/HOMEPAGE.html');
$this->assertEquals(200, $client->getResponse()->getStatusCode());
$content = $client->getResponse()->getContent();
$xml = @simplexml_load_string($content);
$this->assertTrue($xml,"The content <<\n$content\n>> is no valid xml!");
}
// /**
// * @param string $url
// * @param int $status
// */
// public function testHomepageFrameless(): void
// {
// $client = static::createClient();
// $crawler = $client->request(Request::METHOD_GET, 'api/rest/source/HOMEPAGE.html?frame=');
// $this->assertEquals(200, $client->getResponse()->getStatusCode());
// $this->assertEquals(1,$crawler->filter('html')->count());
// }
// /**
// * @param string $url
// * @param int $status
// */
// public function testHomepageExplizitNoFrame(): void
// {
// $client = static::createClient();
// $crawler = $client->request(Request::METHOD_GET, 'api/rest/source/HOMEPAGE.html?frame=0');
// $this->assertEquals(200, $client->getResponse()->getStatusCode());
// $this->assertEquals(1,$crawler->filter('html')->count());
// }
}