From 38898f3d77b2cddce40ff65404e3772888aa31d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20J=C4=99drzejewski?= Date: Mon, 12 Nov 2012 23:17:30 +0100 Subject: [PATCH] Use latest resource bundle, introduce cart item resource controller --- .../CartBundle/Controller/CartController.php | 113 +----------- .../Controller/CartItemController.php | 165 ++++++++++++++++++ .../DependencyInjection/Configuration.php | 1 + .../SyliusCartExtension.php | 1 + .../CartBundle/Provider/CartProvider.php | 2 +- .../config/container/driver/doctrine/orm.xml | 8 +- .../Resources/config/container/services.xml | 8 + .../CartBundle/Resources/config/routing.yml | 4 +- .../CartBundle/Provider/CartProvider.php | 4 +- 9 files changed, 187 insertions(+), 119 deletions(-) create mode 100644 src/Sylius/Bundle/CartBundle/Controller/CartItemController.php diff --git a/src/Sylius/Bundle/CartBundle/Controller/CartController.php b/src/Sylius/Bundle/CartBundle/Controller/CartController.php index a47c87d0ba..9c1d55ced4 100644 --- a/src/Sylius/Bundle/CartBundle/Controller/CartController.php +++ b/src/Sylius/Bundle/CartBundle/Controller/CartController.php @@ -16,7 +16,7 @@ use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; /** - * Cart frontend controller. + * Cart controller. * * @author Paweł Jędrzejewski */ @@ -32,7 +32,7 @@ class CartController extends ResourceController public function showAction(Request $request) { $cart = $this->getCurrentCart(); - $form = $this->createForm($this->getResourceFormType(), $cart); + $form = $this->createForm('sylius_cart', $cart); return $this->renderResponse('show.html', array( 'cart' => $cart, @@ -40,74 +40,6 @@ class CartController extends ResourceController )); } - /** - * Adds item to cart. - * - * @param Request $request - * - * @return Response - */ - public function addItemAction(Request $request) - { - $cart = $this->getCurrentCart(); - $emptyItem = $this->getCartItemManager()->create(); - - $item = $this->getResolver()->resolve($emptyItem, $request); - - if (!$item) { - $this->setFlash('error', 'sylius_cart.flashes.add.error'); - - return $this->redirectToCart(); - } - - $cartOperator = $this->getOperator(); - - $cartOperator - ->addItem($cart, $item) - ->refresh($cart) - ; - - $errors = $this->get('validator')->validate($cart); - - if (0 === count($errors)) { - $this->setFlash('success', 'sylius_cart.flashes.add.success'); - $cartOperator->save($cart); - } - - return $this->redirectToCart(); - } - - /** - * Removes item from cart. - * - * @param Request $request - * @param mixed $id - * - * @return Response - */ - public function removeItemAction(Request $request, $id) - { - $cart = $this->getCurrentCart(); - $item = $this->getCartItemRepository()->get(array('id' => $id)); - - if (!$item || false === $cart->hasItem($item)) { - $this->setFlash('error', 'sylius_cart.flashes.remove.error'); - - return $this->redirectToCart(); - } - - $this - ->getOperator() - ->removeItem($cart, $item) - ->refresh($cart) - ->save($cart) - ; - - $this->setFlash('success', 'sylius_cart.flashes.remove.success'); - - return $this->redirectToCart(); - } - /** * Saves cart. * @@ -120,7 +52,7 @@ class CartController extends ResourceController $cart = $this->getCurrentCart(); $form = $this - ->createForm($this->getResourceFormType(), $cart) + ->createForm('sylius_cart', $cart) ->bind($request) ; @@ -190,26 +122,6 @@ class CartController extends ResourceController ; } - /** - * Get cart item manager. - * - * @return ResourceManagerInterface - */ - protected function getCartItemManager() - { - return $this->get('sylius_cart.manager.item'); - } - - /** - * Get cart item repository. - * - * @return ResourceRepositoryInterface - */ - protected function getCartItemRepository() - { - return $this->get('sylius_cart.repository.item'); - } - /** * Get cart provider. * @@ -229,23 +141,4 @@ class CartController extends ResourceController { return $this->get('sylius_cart.operator'); } - - /** - * Get cart item resolver. - * - * @return CartResolverInterface - */ - protected function getResolver() - { - return $this->get('sylius_cart.resolver'); - } - - /** - * {@inheritdoc} - */ - protected function getResourceFormType() - { - return 'sylius_cart'; - } - } diff --git a/src/Sylius/Bundle/CartBundle/Controller/CartItemController.php b/src/Sylius/Bundle/CartBundle/Controller/CartItemController.php new file mode 100644 index 0000000000..d5f2335d60 --- /dev/null +++ b/src/Sylius/Bundle/CartBundle/Controller/CartItemController.php @@ -0,0 +1,165 @@ + + */ +class CartItemController extends ResourceController +{ + /** + * Adds item to cart. + * + * @param Request $request + * + * @return Response + */ + public function addAction(Request $request) + { + $cart = $this->getCurrentCart(); + $emptyItem = $this->create(); + + $item = $this->getResolver()->resolve($emptyItem, $request); + + if (!$item) { + $this->setFlash('error', 'sylius_cart.flashes.add.error'); + + return $this->redirectToCart(); + } + + $cartOperator = $this->getOperator(); + + $cartOperator + ->addItem($cart, $item) + ->refresh($cart) + ; + + $errors = $this->get('validator')->validate($cart); + + if (0 === count($errors)) { + $this->setFlash('success', 'sylius_cart.flashes.add.success'); + $cartOperator->save($cart); + } + + return $this->redirectToCart(); + } + + /** + * Removes item from cart. + * + * @param Request $request + * @param mixed $id + * + * @return Response + */ + public function removeAction(Request $request, $id) + { + $cart = $this->getCurrentCart(); + $item = $this->getRepository()->find($id); + + if (!$item || false === $cart->hasItem($item)) { + $this->setFlash('error', 'sylius_cart.flashes.remove.error'); + + return $this->redirectToCart(); + } + + $this + ->getOperator() + ->removeItem($cart, $item) + ->refresh($cart) + ->save($cart) + ; + + $this->setFlash('success', 'sylius_cart.flashes.remove.success'); + + return $this->redirectToCart(); + } + + /** + * Redirect to show cart action. + * + * @return RedirectResponse + */ + protected function redirectToCart() + { + return $this->redirect($this->generateUrl($this->getCartRoute())); + } + + /** + * Cart show action route. + * + * @return string + */ + protected function getCartRoute() + { + return 'sylius_cart_show'; + } + + /** + * Get current cart. + * + * @return CartInterface + */ + protected function getCurrentCart() + { + return $this + ->getProvider() + ->getCart() + ; + } + + /** + * Get cart provider. + * + * @return CartProviderInterface + */ + protected function getProvider() + { + return $this->get('sylius_cart.provider'); + } + + /** + * Get cart operator. + * + * @return CartOperatorInterface + */ + protected function getOperator() + { + return $this->get('sylius_cart.operator'); + } + + /** + * Get cart item resolver. + * + * @return CartResolverInterface + */ + protected function getResolver() + { + return $this->get('sylius_cart.resolver'); + } +} diff --git a/src/Sylius/Bundle/CartBundle/DependencyInjection/Configuration.php b/src/Sylius/Bundle/CartBundle/DependencyInjection/Configuration.php index bcbed566ac..9ed0160f1c 100644 --- a/src/Sylius/Bundle/CartBundle/DependencyInjection/Configuration.php +++ b/src/Sylius/Bundle/CartBundle/DependencyInjection/Configuration.php @@ -74,6 +74,7 @@ class Configuration implements ConfigurationInterface ->addDefaultsIfNotSet() ->children() ->scalarNode('cart')->defaultValue('Sylius\\Bundle\\CartBundle\\Controller\\CartController')->end() + ->scalarNode('item')->defaultValue('Sylius\\Bundle\\CartBundle\\Controller\\CartItemController')->end() ->end() ->end() ->arrayNode('form') diff --git a/src/Sylius/Bundle/CartBundle/DependencyInjection/SyliusCartExtension.php b/src/Sylius/Bundle/CartBundle/DependencyInjection/SyliusCartExtension.php index 7aed2e84a2..80c9d80eef 100644 --- a/src/Sylius/Bundle/CartBundle/DependencyInjection/SyliusCartExtension.php +++ b/src/Sylius/Bundle/CartBundle/DependencyInjection/SyliusCartExtension.php @@ -63,6 +63,7 @@ class SyliusCartExtension extends Extension $container->setParameter('sylius_cart.model.item.class', $config['classes']['model']['item']); $container->setParameter('sylius_cart.controller.cart.class', $config['classes']['controller']['cart']); + $container->setParameter('sylius_cart.controller.item.class', $config['classes']['controller']['item']); $container->setParameter('sylius_cart.form.type.cart.class', $config['classes']['form']['type']['cart']); $container->setParameter('sylius_cart.form.type.item.class', $config['classes']['form']['type']['item']); diff --git a/src/Sylius/Bundle/CartBundle/Provider/CartProvider.php b/src/Sylius/Bundle/CartBundle/Provider/CartProvider.php index 4aaf35b308..224c7565e3 100644 --- a/src/Sylius/Bundle/CartBundle/Provider/CartProvider.php +++ b/src/Sylius/Bundle/CartBundle/Provider/CartProvider.php @@ -114,6 +114,6 @@ class CartProvider implements CartProviderInterface */ protected function getCartByIdentifier($identifier) { - return $this->repository->get(array('id' => $identifier)); + return $this->repository->find($identifier); } } diff --git a/src/Sylius/Bundle/CartBundle/Resources/config/container/driver/doctrine/orm.xml b/src/Sylius/Bundle/CartBundle/Resources/config/container/driver/doctrine/orm.xml index dfa01f74f1..795995aed7 100644 --- a/src/Sylius/Bundle/CartBundle/Resources/config/container/driver/doctrine/orm.xml +++ b/src/Sylius/Bundle/CartBundle/Resources/config/container/driver/doctrine/orm.xml @@ -17,10 +17,10 @@ http://symfony.com/schema/dic/services/services-1.0.xsd"> - Sylius\Bundle\ResourceBundle\Manager\Doctrine\DoctrineResourceManager - Sylius\Bundle\ResourceBundle\Repository\Doctrine\ORM\ResourceRepository - Sylius\Bundle\ResourceBundle\Manager\Doctrine\DoctrineResourceManager - Sylius\Bundle\ResourceBundle\Repository\Doctrine\ORM\ResourceRepository + Sylius\Bundle\ResourceBundle\Doctrine\ResourceManager + Sylius\Bundle\ResourceBundle\Doctrine\ORM\ResourceRepository + Sylius\Bundle\ResourceBundle\Doctrine\ResourceManager + Sylius\Bundle\ResourceBundle\Doctrine\ORM\ResourceRepository diff --git a/src/Sylius/Bundle/CartBundle/Resources/config/container/services.xml b/src/Sylius/Bundle/CartBundle/Resources/config/container/services.xml index c2651feb6e..1d77451502 100644 --- a/src/Sylius/Bundle/CartBundle/Resources/config/container/services.xml +++ b/src/Sylius/Bundle/CartBundle/Resources/config/container/services.xml @@ -30,6 +30,14 @@ + + sylius_cart + item + SyliusCartBundle:CartItem + + + + %sylius_cart.model.cart.class% diff --git a/src/Sylius/Bundle/CartBundle/Resources/config/routing.yml b/src/Sylius/Bundle/CartBundle/Resources/config/routing.yml index 7eac291347..47c3fc54ce 100644 --- a/src/Sylius/Bundle/CartBundle/Resources/config/routing.yml +++ b/src/Sylius/Bundle/CartBundle/Resources/config/routing.yml @@ -15,8 +15,8 @@ sylius_cart_clear: sylius_cart_item_add: pattern: /item/add - defaults: { _controller: sylius_cart.controller.cart:addItemAction } + defaults: { _controller: sylius_cart.controller.item:addAction } sylius_cart_item_remove: pattern: /item/{id}/remove - defaults: { _controller: sylius_cart.controller.cart:removeItemAction } + defaults: { _controller: sylius_cart.controller.item:removeAction } diff --git a/src/Sylius/Bundle/CartBundle/spec/Sylius/Bundle/CartBundle/Provider/CartProvider.php b/src/Sylius/Bundle/CartBundle/spec/Sylius/Bundle/CartBundle/Provider/CartProvider.php index af02b8aee0..57f3f5fe15 100644 --- a/src/Sylius/Bundle/CartBundle/spec/Sylius/Bundle/CartBundle/Provider/CartProvider.php +++ b/src/Sylius/Bundle/CartBundle/spec/Sylius/Bundle/CartBundle/Provider/CartProvider.php @@ -49,7 +49,7 @@ class CartProvider extends ObjectBehavior function it_should_look_for_cart_by_identifier_if_any($storage, $repository, $cart) { $storage->getCurrentCartIdentifier()->willReturn(3); - $repository->get(array('id' => 3))->shouldBeCalled()->willReturn($cart); + $repository->find(3)->shouldBeCalled()->willReturn($cart); $this->getCart()->shouldReturn($cart); } @@ -71,7 +71,7 @@ class CartProvider extends ObjectBehavior function it_should_create_new_cart_if_identifier_is_wrong($storage, $manager, $repository, $cart) { $storage->getCurrentCartIdentifier()->willReturn(7); - $repository->get(array('id' => 7))->shouldBeCalled()->willReturn(null); + $repository->find(7)->shouldBeCalled()->willReturn(null); $manager->create()->willReturn($cart); $this->getCart()->shouldReturn($cart);