base
This commit is contained in:
commit
522beb2a2b
11
.gitignore
vendored
Normal file
11
.gitignore
vendored
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
/app/bootstrap.php.cache
|
||||||
|
/app/cache/*
|
||||||
|
!app/cache/.gitkeep
|
||||||
|
/app/config/parameters.yml
|
||||||
|
/app/logs/*
|
||||||
|
!app/logs/.gitkeep
|
||||||
|
/app/phpunit.xml
|
||||||
|
/bin/
|
||||||
|
/composer.phar
|
||||||
|
/vendor/
|
||||||
|
/web/bundles/
|
7
src/.htaccess
Normal file
7
src/.htaccess
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
<IfModule mod_authz_core.c>
|
||||||
|
Require all denied
|
||||||
|
</IfModule>
|
||||||
|
<IfModule !mod_authz_core.c>
|
||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
||||||
|
</IfModule>
|
11
src/AppBundle/AppBundle.php
Normal file
11
src/AppBundle/AppBundle.php
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace AppBundle;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpKernel\Bundle\Bundle;
|
||||||
|
use Symfony\Component\Config\Loader\Loader;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
|
||||||
|
class AppBundle extends Bundle
|
||||||
|
{
|
||||||
|
}
|
42
src/AppBundle/Controller/DefaultController.php
Normal file
42
src/AppBundle/Controller/DefaultController.php
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace AppBundle\Controller;
|
||||||
|
|
||||||
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
|
||||||
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
|
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
|
||||||
|
use Symfony\Component\HttpFoundation\RedirectResponse;
|
||||||
|
|
||||||
|
class DefaultController extends Controller
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @Route("/", name="homepage")
|
||||||
|
* @Template()
|
||||||
|
*/
|
||||||
|
public function indexAction(Request $request)
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Route("/add/{id}", name="add_prestation")
|
||||||
|
*/
|
||||||
|
public function addAction(Request $request, $id)
|
||||||
|
{
|
||||||
|
$this->get('cart')
|
||||||
|
->addPrestation($id)
|
||||||
|
->update();
|
||||||
|
|
||||||
|
return new RedirectResponse($this->generateUrl('homepage'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Route("/cart", name="cart")
|
||||||
|
* @Template()
|
||||||
|
*/
|
||||||
|
public function cartAction(Request $request)
|
||||||
|
{
|
||||||
|
return ['cart' => $this->get('cart')];
|
||||||
|
}
|
||||||
|
}
|
18
src/AppBundle/DependencyInjection/AppExtension.php
Normal file
18
src/AppBundle/DependencyInjection/AppExtension.php
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace AppBundle\DependencyInjection;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\Config\Loader\Loader;
|
||||||
|
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
|
||||||
|
use Symfony\Component\Config\FileLocator;
|
||||||
|
|
||||||
|
class AppExtension extends Extension
|
||||||
|
{
|
||||||
|
public function load(array $configs, ContainerBuilder $container)
|
||||||
|
{
|
||||||
|
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
|
||||||
|
$loader->load('services.xml');
|
||||||
|
}
|
||||||
|
}
|
53
src/AppBundle/Model/Cart.php
Normal file
53
src/AppBundle/Model/Cart.php
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace AppBundle\Model;
|
||||||
|
|
||||||
|
use Symfony\Component\HttpFoundation\Session\Session;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class Cart
|
||||||
|
* @author Simon Vieille <simon@deblan.fr>
|
||||||
|
*/
|
||||||
|
class Cart
|
||||||
|
{
|
||||||
|
protected $prestations = [];
|
||||||
|
|
||||||
|
protected $session;
|
||||||
|
|
||||||
|
public function __construct(Session $session)
|
||||||
|
{
|
||||||
|
$this->session = $session;
|
||||||
|
|
||||||
|
$sessionCart = $this->session->get('cart');
|
||||||
|
|
||||||
|
if ($sessionCart !== null) {
|
||||||
|
$this->setPrestations($sessionCart->getPrestations());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function addPrestation($id)
|
||||||
|
{
|
||||||
|
if (!in_array($id, $this->prestations)) {
|
||||||
|
$this->prestations[] = $id;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getPrestations()
|
||||||
|
{
|
||||||
|
return $this->prestations;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function setPrestations(array $prestations)
|
||||||
|
{
|
||||||
|
$this->prestations = $prestations;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function update()
|
||||||
|
{
|
||||||
|
$this->session->set('cart', $this);
|
||||||
|
}
|
||||||
|
}
|
17
src/AppBundle/Resources/config/services.xml
Normal file
17
src/AppBundle/Resources/config/services.xml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0" ?>
|
||||||
|
|
||||||
|
<container xmlns="http://symfony.com/schema/dic/services"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
|
||||||
|
|
||||||
|
<parameters>
|
||||||
|
<parameter key="cart.class">AppBundle\Model\Cart</parameter>
|
||||||
|
</parameters>
|
||||||
|
|
||||||
|
<services>
|
||||||
|
<service id="cart" class="%cart.class%">
|
||||||
|
<argument type="service" id="session"></argument>
|
||||||
|
</service>
|
||||||
|
</services>
|
||||||
|
</container>
|
||||||
|
|
20
src/AppBundle/Resources/views/Default/cart.html.twig
Normal file
20
src/AppBundle/Resources/views/Default/cart.html.twig
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<ul>
|
||||||
|
{% for item in cart.prestations %}
|
||||||
|
<li>
|
||||||
|
Prestation {{ item }}
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="{{ path('homepage') }}">Accueil</a>
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
30
src/AppBundle/Resources/views/Default/index.html.twig
Normal file
30
src/AppBundle/Resources/views/Default/index.html.twig
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<a href="{{ path('add_prestation', {id: 1}) }}">Ajouter prestation 1</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{{ path('add_prestation', {id: 2}) }}">Ajouter prestation 2</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{{ path('add_prestation', {id: 3}) }}">Ajouter prestation 3</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{{ path('add_prestation', {id: 4}) }}">Ajouter prestation 4</a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="{{ path('add_prestation', {id: 5}) }}">Ajouter prestation 5</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<a href="{{ path('cart') }}">Afficher le panier</a>
|
||||||
|
</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
18
src/AppBundle/Tests/Controller/DefaultControllerTest.php
Normal file
18
src/AppBundle/Tests/Controller/DefaultControllerTest.php
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace AppBundle\Tests\Controller;
|
||||||
|
|
||||||
|
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
|
||||||
|
|
||||||
|
class DefaultControllerTest extends WebTestCase
|
||||||
|
{
|
||||||
|
public function testIndex()
|
||||||
|
{
|
||||||
|
$client = static::createClient();
|
||||||
|
|
||||||
|
$crawler = $client->request('GET', '/');
|
||||||
|
|
||||||
|
$this->assertEquals(200, $client->getResponse()->getStatusCode());
|
||||||
|
$this->assertContains('Welcome to Symfony', $crawler->filter('#container h1')->text());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue