mirror of
https://github.com/Sylius/Sylius.git
synced 2026-07-14 17:10:53 +00:00
Merge pull request #56 from amenophis/master
[WIP] Add possibility to stopPropagation
This commit is contained in:
commit
2b3d58a645
3 changed files with 171 additions and 40 deletions
|
|
@ -201,9 +201,11 @@ class Configuration
|
|||
return $this->get('arguments', $default);
|
||||
}
|
||||
|
||||
public function getFlashMessage()
|
||||
public function getFlashMessage($message = null)
|
||||
{
|
||||
return $this->get('flash');
|
||||
$message = sprintf('%s.%s.%s', $this->bundlePrefix, $this->resourceName, $message);
|
||||
|
||||
return $this->get('flash', $message);
|
||||
}
|
||||
|
||||
protected function get($parameter, $default = null)
|
||||
|
|
|
|||
|
|
@ -13,9 +13,9 @@ namespace Sylius\Bundle\ResourceBundle\Controller;
|
|||
|
||||
use FOS\RestBundle\Controller\FOSRestController;
|
||||
use Symfony\Component\EventDispatcher\Event;
|
||||
use Symfony\Component\EventDispatcher\GenericEvent;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||
use Sylius\Bundle\ResourceBundle\Event\ResourceEvent;
|
||||
|
||||
/**
|
||||
* Base resource controller for Sylius.
|
||||
|
|
@ -127,10 +127,13 @@ class ResourceController extends FOSRestController
|
|||
$form = $this->getForm($resource);
|
||||
|
||||
if ($request->isMethod('POST') && $form->bind($request)->isValid()) {
|
||||
$this->create($resource);
|
||||
$this->setFlash('success', 'create');
|
||||
$event = $this->create($resource);
|
||||
if (!$event->isStopped()) {
|
||||
$this->setFlash('success', 'create');
|
||||
return $this->redirectTo($resource);
|
||||
}
|
||||
|
||||
return $this->redirectTo($resource);
|
||||
$this->setFlash($event->getMessageType(), $event->getMessage(), $event->getMessageParams());
|
||||
}
|
||||
|
||||
if ($config->isApiRequest()) {
|
||||
|
|
@ -160,10 +163,13 @@ class ResourceController extends FOSRestController
|
|||
$form = $this->getForm($resource);
|
||||
|
||||
if (($request->isMethod('PUT') || $request->isMethod('POST')) && $form->bind($request)->isValid()) {
|
||||
$this->update($resource);
|
||||
$this->setFlash('success', 'update');
|
||||
$event = $this->update($resource);
|
||||
if (!$event->isStopped()) {
|
||||
$this->setFlash('success', 'update');
|
||||
return $this->redirectTo($resource);
|
||||
}
|
||||
|
||||
return $this->redirectTo($resource);
|
||||
$this->setFlash($event->getMessageType(), $event->getMessage(), $event->getMessageParams());
|
||||
}
|
||||
|
||||
if ($config->isApiRequest()) {
|
||||
|
|
@ -189,9 +195,15 @@ class ResourceController extends FOSRestController
|
|||
{
|
||||
$resource = $this->findOr404();
|
||||
|
||||
$this->delete($resource);
|
||||
$this->setFlash('success', 'delete');
|
||||
$event = $this->delete($resource);
|
||||
|
||||
if ($event->isStopped()) {
|
||||
$this->setFlash($event->getMessageType(), $event->getMessage(), $event->getMessageParams());
|
||||
return $this->redirectTo($resource);
|
||||
}
|
||||
|
||||
$this->setFlash('success', 'delete');
|
||||
|
||||
return $this->redirectToIndex($resource);
|
||||
}
|
||||
|
||||
|
|
@ -265,33 +277,48 @@ class ResourceController extends FOSRestController
|
|||
{
|
||||
$manager = $this->getManager();
|
||||
|
||||
$this->dispatchEvent('pre_create', $resource);
|
||||
$manager->persist($resource);
|
||||
$this->dispatchEvent('create', $resource);
|
||||
$manager->flush();
|
||||
$this->dispatchEvent('post_create', $resource);
|
||||
$event = $this->dispatchEvent('pre_create', $resource);
|
||||
|
||||
if(!$event->isStopped()) {
|
||||
$manager->persist($resource);
|
||||
$this->dispatchEvent('create', $resource);
|
||||
$manager->flush();
|
||||
$this->dispatchEvent('post_create', $resource);
|
||||
}
|
||||
|
||||
return $event;
|
||||
}
|
||||
|
||||
public function update($resource)
|
||||
{
|
||||
$manager = $this->getManager();
|
||||
|
||||
$this->dispatchEvent('pre_update', $resource);
|
||||
$manager->persist($resource);
|
||||
$this->dispatchEvent('update', $resource);
|
||||
$manager->flush();
|
||||
$this->dispatchEvent('post_update', $resource);
|
||||
$event = $this->dispatchEvent('pre_update', $resource);
|
||||
|
||||
if(!$event->isStopped()) {
|
||||
$manager->persist($resource);
|
||||
$this->dispatchEvent('update', $resource);
|
||||
$manager->flush();
|
||||
$this->dispatchEvent('post_update', $resource);
|
||||
}
|
||||
|
||||
return $event;
|
||||
}
|
||||
|
||||
public function delete($resource)
|
||||
{
|
||||
$manager = $this->getManager();
|
||||
|
||||
$this->dispatchEvent('pre_delete', $resource);
|
||||
$manager->remove($resource);
|
||||
$this->dispatchEvent('delete', $resource);
|
||||
$manager->flush();
|
||||
$this->dispatchEvent('post_delete', $resource);
|
||||
$event = $this->dispatchEvent('pre_delete', $resource);
|
||||
|
||||
if(!$event->isStopped()) {
|
||||
$manager->remove($resource);
|
||||
$this->dispatchEvent('delete', $resource);
|
||||
$manager->flush();
|
||||
$this->dispatchEvent('post_delete', $resource);
|
||||
}
|
||||
|
||||
return $event;
|
||||
}
|
||||
|
||||
public function persistAndFlush($resource)
|
||||
|
|
@ -352,46 +379,44 @@ class ResourceController extends FOSRestController
|
|||
if (!$eventOrResource instanceof Event) {
|
||||
$name = $this->getConfiguration()->getEventName($name);
|
||||
|
||||
$eventOrResource = new GenericEvent($eventOrResource);
|
||||
$eventOrResource = new ResourceEvent($eventOrResource);
|
||||
} else if(!$eventOrResource instanceof ResourceEvent) {
|
||||
throw new \InvalidArgumentException('If you provide an Event, it need to extends Sylius\Bundle\ResourceBundle\Event\ResourceEvent.');
|
||||
}
|
||||
|
||||
$this->get('event_dispatcher')->dispatch($name, $eventOrResource);
|
||||
return $this->get('event_dispatcher')->dispatch($name, $eventOrResource);
|
||||
}
|
||||
|
||||
protected function setFlash($type, $event)
|
||||
protected function setFlash($type, $event, $params = array())
|
||||
{
|
||||
return $this
|
||||
->get('session')
|
||||
->getFlashBag()
|
||||
->add($type, $this->generateFlashMessage($event))
|
||||
->add($type, $this->generateFlashMessage($event, $params))
|
||||
;
|
||||
}
|
||||
|
||||
protected function generateFlashMessage($event)
|
||||
protected function generateFlashMessage($event, $params = array())
|
||||
{
|
||||
$config = $this->getConfiguration();
|
||||
|
||||
if (null !== $message = $config->getFlashMessage()) {
|
||||
return $this->translateFlashMessage($message);
|
||||
}
|
||||
|
||||
$message = implode('.', array($config->getBundlePrefix(), $config->getResourceName(), $event));
|
||||
$translatedMessage = $this->translateFlashMessage($message);
|
||||
$message = $config->getFlashMessage($event);
|
||||
$translatedMessage = $this->translateFlashMessage($message, $params);
|
||||
|
||||
if ($message !== $translatedMessage) {
|
||||
return $translatedMessage;
|
||||
}
|
||||
|
||||
return $this->translateFlashMessage('sylius.resource.'.$event);
|
||||
return $this->translateFlashMessage('sylius.resource.'.$event, $params);
|
||||
}
|
||||
|
||||
protected function translateFlashMessage($message)
|
||||
protected function translateFlashMessage($message, $params = array())
|
||||
{
|
||||
$resource = ucfirst(str_replace('_', ' ', $this->getConfiguration()->getResourceName()));
|
||||
|
||||
return $this->get('translator')->trans(
|
||||
$message,
|
||||
array('%resource%' => $resource),
|
||||
array_merge(array('%resource%' => $resource), $params),
|
||||
'flashes'
|
||||
);
|
||||
}
|
||||
|
|
|
|||
104
src/Sylius/Bundle/ResourceBundle/Event/ResourceEvent.php
Normal file
104
src/Sylius/Bundle/ResourceBundle/Event/ResourceEvent.php
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Sylius package.
|
||||
*
|
||||
* (c) Paweł Jędrzejewski
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Sylius\Bundle\ResourceBundle\Event;
|
||||
|
||||
use Symfony\Component\EventDispatcher\GenericEvent;
|
||||
|
||||
/**
|
||||
* Resource event.
|
||||
*
|
||||
* @author Jérémy Leherpeur <jeremy@lehepeur.net>
|
||||
*/
|
||||
class ResourceEvent extends GenericEvent
|
||||
{
|
||||
const TYPE_ERROR = 'error';
|
||||
const TYPE_WARNING = 'warning';
|
||||
const TYPE_INFO = 'info';
|
||||
const TYPE_SUCCESS = 'success';
|
||||
|
||||
public function stop($message, $type = self::TYPE_ERROR, $params = array())
|
||||
{
|
||||
$this->error = true;
|
||||
$this->messageType = $type;
|
||||
$this->message = $message;
|
||||
$this->messageParams = $params;
|
||||
$this->stopPropagation();
|
||||
}
|
||||
|
||||
/**
|
||||
* Indicate if an error has been detected
|
||||
*
|
||||
* @var boolean
|
||||
*/
|
||||
protected $error = false;
|
||||
|
||||
/**
|
||||
* Message type
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $messageType = '';
|
||||
|
||||
/**
|
||||
* Message
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $message = '';
|
||||
|
||||
/**
|
||||
* Message parameters
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $messageParams = array();
|
||||
|
||||
/**
|
||||
* Get error property
|
||||
*
|
||||
* @return boolean $error
|
||||
*/
|
||||
public function isStopped()
|
||||
{
|
||||
return $this->error === true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get messageType property
|
||||
*
|
||||
* @return string $messageType
|
||||
*/
|
||||
public function getMessageType()
|
||||
{
|
||||
return $this->messageType;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get message property
|
||||
*
|
||||
* @return string $message
|
||||
*/
|
||||
public function getMessage()
|
||||
{
|
||||
return $this->message;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get messageParams property
|
||||
*
|
||||
* @return string $messageParams
|
||||
*/
|
||||
public function getMessageParams()
|
||||
{
|
||||
return $this->messageParams;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue