-
Notifications
You must be signed in to change notification settings - Fork 183
Added an optional flashmessage listener #183
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 3 commits
9e02547
f21d3ea
ef1ee68
8e1d37b
31de539
97fd7dd
fb105f3
ac283df
f884e39
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -65,5 +65,12 @@ public function load(array $configs, ContainerBuilder $container) | |
|
|
||
| $container->getDefinition('fos_message.recipients_data_transformer') | ||
| ->replaceArgument(0, new Reference($config['user_transformer'])); | ||
|
|
||
| if ($config['flash_messages']['enabled']) | ||
| { | ||
| $loader->load('flash.xml'); | ||
| $container->getDefinition('fos_message.flash_listener') | ||
| ->replaceArgument(2, $config['flash_messages']['flash_key']); | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. you should make it a parameter instead of replacing it in the service definition directly IMO
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Well it's an easy fix, now I don't check if that setting has been changed but just always set that option. A container doesn't get rebuild that many times so is there harm in this? Edit: Think I understand what you mean now...I'll look into it |
||
| } | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,92 @@ | ||
| <?php | ||
| namespace FOS\MessageBundle\EventListener; | ||
|
|
||
| use Symfony\Component\EventDispatcher\EventSubscriberInterface; | ||
| use FOS\MessageBundle\Event\FOSMessageEvents; | ||
| use Symfony\Component\Translation\TranslatorInterface; | ||
| use Symfony\Component\HttpFoundation\Session\Session; | ||
| use Symfony\Component\EventDispatcher\Event; | ||
|
|
||
| /** | ||
| * The flash listener adds flash messages when certain message events occur | ||
| * | ||
| * @author Michiel Boeckaert <[email protected]> | ||
| */ | ||
| class FlashListener implements EventSubscriberInterface | ||
| { | ||
| private static $successMessages = array( | ||
| FOSMessageEvents::POST_SEND => 'flash_post_send_success', | ||
| FOSMessageEvents::POST_DELETE => 'flash_thread_delete_success', | ||
| FOSMessageEvents::POST_UNDELETE => 'flash_thread_undelete_success', | ||
| ); | ||
|
|
||
| /** | ||
| * Translator | ||
| * | ||
| * @var TranslatorInterface | ||
| */ | ||
| protected $translator; | ||
|
|
||
| /** | ||
| * Session | ||
| * | ||
| * @var Session | ||
| */ | ||
| protected $session; | ||
|
|
||
| /** | ||
| * The flash key | ||
| * | ||
| * @var string | ||
| */ | ||
| protected $key; | ||
|
|
||
| /** | ||
| * Constructor. | ||
| * | ||
| * @param Session $session The current session | ||
| * @param TranslatorInterface $translator A translator instance | ||
| * @param string $key The flash key | ||
| */ | ||
| public function __construct(Session $session, TranslatorInterface $translator, $key) | ||
| { | ||
| $this->session = $session; | ||
| $this->translator = $translator; | ||
| $this->key = $key; | ||
| } | ||
|
|
||
| /** | ||
| * {@inheritdoc} | ||
| */ | ||
| public static function getSubscribedEvents() | ||
| { | ||
| return array( | ||
| FOSMessageEvents::POST_SEND => 'addSuccessFlash', | ||
| FOSMessageEvents::POST_DELETE => 'addSuccessFlash', | ||
| FOSMessageEvents::POST_UNDELETE => 'addSuccessFlash' | ||
| ); | ||
| } | ||
|
|
||
| /** | ||
| * Adds a flashmessage to the session | ||
| * | ||
| * @param Event $event The current event | ||
| * | ||
| * @throws \InvalidArgumentException | ||
| */ | ||
| public function addSuccessFlash(Event $event) | ||
| { | ||
| $eventName = $event->getname(); | ||
|
|
||
| if (!isset(self::$successMessages[$eventName])) { | ||
| throw new \InvalidArgumentException('This event does not correspond to a known flash message'); | ||
| } | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Spacing |
||
|
|
||
| $this->session->getFlashBag()->add($this->key, $this->trans(self::$successMessages[$eventName])); | ||
| } | ||
|
|
||
| private function trans($message, array $params = array()) | ||
| { | ||
| return $this->translator->trans($message, $params, 'FOSMessageBundle'); | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not enough spaces :)
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Damn i'm starting to count them by hand till i fix my editor 😢
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You can install phpcs as a pear package which will list all these issues On Fri, Oct 18, 2013 at 11:47 AM, Miliooo [email protected] wrote:
|
||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| <?xml version="1.0" encoding="UTF-8" ?> | ||
|
|
||
| <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="fos_message.flash_listener.class">FOS\MessageBundle\EventListener\FlashListener</parameter> | ||
| </parameters> | ||
|
|
||
| <services> | ||
|
|
||
| <service id="fos_message.flash_listener" class="%fos_message.flash_listener.class%"> | ||
| <argument type="service" id="session" /> | ||
| <argument type="service" id="translator" /> | ||
| <argument></argument> | ||
| <tag name="kernel.event_subscriber" /> | ||
| </service> | ||
|
|
||
| </services> | ||
|
|
||
| </container> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,62 @@ | ||
| <?php | ||
| namespace FOS\MessageBundle\Tests\EventListener; | ||
|
|
||
| use FOS\MessageBundle\EventListener\FlashListener; | ||
| use FOS\MessageBundle\Event\FOSMessageEvents; | ||
|
|
||
| /** | ||
| * Test for the Flash listener | ||
| * | ||
| * @author Michiel Boeckaert <[email protected]> | ||
| */ | ||
| class FlashListenerTest extends \PHPUnit_Framework_TestCase | ||
| { | ||
| private $listener; | ||
| private $session; | ||
| private $translator; | ||
| private $event; | ||
| private $key; | ||
|
|
||
| public function setUp() | ||
| { | ||
| $this->event = $this->getMock('Symfony\Component\EventDispatcher\Event'); | ||
|
|
||
| //if we use the interface getflashbag returns an error... | ||
| $this->session = $this->getMockBuilder('Symfony\Component\HttpFoundation\Session\Session')->disableOriginalConstructor()->getMock(); | ||
| $this->translator = $this->getMock('Symfony\Component\Translation\TranslatorInterface'); | ||
| $this->key = 'success'; | ||
| $this->listener = new FlashListener($this->session, $this->translator, $this->key); | ||
| } | ||
|
|
||
| /** | ||
| * @expectedException \InvalidArgumentException | ||
| * @expectedExceptionMessage This event does not correspond to a known flash message | ||
| */ | ||
| public function testAddFlashWithNonSupportedEvent() | ||
| { | ||
| $this->event->expects($this->once())->method('getName')->will($this->returnValue('foo')); | ||
| $this->listener->addSuccessFlash($this->event); | ||
| } | ||
|
|
||
| public function testAddFlashOnValidEventWithDefaultKey() | ||
| { | ||
| $flashbagMock = $this->getMock('Symfony\Component\HttpFoundation\Session\Flash\FlashBagInterface'); | ||
|
|
||
| $this->event->expects($this->once())->method('getName')->will($this->returnValue(FOSMessageEvents::POST_SEND)); | ||
|
|
||
| $this->translator->expects($this->once()) | ||
| ->method('trans') | ||
| ->with('flash_post_send_success', array(), 'FOSMessageBundle') | ||
| ->will($this->returnValue('translatedString')); | ||
|
|
||
| $this->session->expects($this->once()) | ||
| ->method('getFlashBag') | ||
| ->will($this->returnValue($flashbagMock)); | ||
|
|
||
| $flashbagMock->expects($this->once()) | ||
| ->method('add') | ||
| ->with('success', 'translatedString'); | ||
|
|
||
| $this->listener->addSuccessFlash($this->event); | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this curly brace should be on the previous line