Skip to content
This repository was archived by the owner on Jan 31, 2020. It is now read-only.

Commit 0e2717c

Browse files
committed
Allow the FlashMessenger helper to work against both v2 and v3
Updates the FlashMessenger to be forwards compatible with zendframework/zend-mvc-plugin-flashmessenger, while retaining compatibility with zend-mvc 2.7. This required: - Removing references to class constants defined in the FlashMessenger MVC plugin; this means temporarily hardcoding the values in the helper, and resulted in a TODO item to re-introduce them for version 3. - Removing typehints for the FlashMessenger MVC plugin; when required, we now test against both the v2 and v3 class name to validate. - Deprecating the helper for version 3.0.
1 parent 5f50450 commit 0e2717c

File tree

3 files changed

+41
-16
lines changed

3 files changed

+41
-16
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ before_install:
7878
- if [[ $EXECUTE_TEST_COVERALLS == 'true' ]]; then composer require --dev --no-update satooshi/php-coveralls ; fi
7979

8080
install:
81+
- if [[ $DEPS == 'latest' ]]; then travis_retry composer require --dev --no-update $COMPOSER_ARGS zendframework/zend-mvc-plugin-flashmessenger ; fi
8182
- if [[ $DEPS == 'latest' ]]; then travis_retry composer update $COMPOSER_ARGS ; fi
8283
- if [[ $DEPS == 'lowest' ]]; then travis_retry composer update --prefer-lowest --prefer-stable $COMPOSER_ARGS ; fi
8384
- travis_retry composer install $COMPOSER_ARGS

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
"zendframework/zend-json": "^2.6.1",
3232
"zendframework/zend-log": "^2.7",
3333
"zendframework/zend-modulemanager": "^2.7.1",
34-
"zendframework/zend-mvc": "^2.7",
34+
"zendframework/zend-mvc": "^2.7 || ^3.0",
3535
"zendframework/zend-navigation": "^2.5",
3636
"zendframework/zend-paginator": "^2.5",
3737
"zendframework/zend-permissions-acl": "^2.6",

src/Helper/FlashMessenger.php

Lines changed: 39 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,17 @@
77

88
namespace Zend\View\Helper;
99

10+
use Zend\Mvc\Controller\Plugin\FlashMessenger as V2PluginFlashMessenger;
1011
use Zend\Mvc\Plugin\FlashMessenger\FlashMessenger as PluginFlashMessenger;
12+
use Zend\View\Exception\InvalidArgumentException;
1113

1214
/**
1315
* Helper to proxy the plugin flash messenger
1416
*
1517
* Duck-types against Zend\I18n\Translator\TranslatorAwareInterface.
18+
*
19+
* @deprecated This helper will be removed in version 3.0 of this component.
20+
* At that time, it will be available in zendframework/zend-mvc-plugin-flashmessenger.
1621
*/
1722
class FlashMessenger extends AbstractHelper
1823
{
@@ -21,14 +26,16 @@ class FlashMessenger extends AbstractHelper
2126
/**
2227
* Default attributes for the open format tag
2328
*
29+
* @todo For version 3, have the keys reference the class constants in the
30+
* FlashMessenger plugin.
2431
* @var array
2532
*/
2633
protected $classMessages = [
27-
PluginFlashMessenger::NAMESPACE_INFO => 'info',
28-
PluginFlashMessenger::NAMESPACE_ERROR => 'error',
29-
PluginFlashMessenger::NAMESPACE_SUCCESS => 'success',
30-
PluginFlashMessenger::NAMESPACE_DEFAULT => 'default',
31-
PluginFlashMessenger::NAMESPACE_WARNING => 'warning',
34+
'info' => 'info',
35+
'error' => 'error',
36+
'success' => 'success',
37+
'default' => 'default',
38+
'warning' => 'warning',
3239
];
3340

3441
/**
@@ -57,15 +64,15 @@ class FlashMessenger extends AbstractHelper
5764
/**
5865
* Flash messenger plugin
5966
*
60-
* @var PluginFlashMessenger
67+
* @var V2PluginFlashMessenger|PluginFlashMessenger
6168
*/
6269
protected $pluginFlashMessenger;
6370

6471
/**
6572
* Returns the flash messenger plugin controller
6673
*
6774
* @param string|null $namespace
68-
* @return FlashMessenger|PluginFlashMessenger
75+
* @return FlashMessenger|V2PluginFlashMessenger|PluginFlashMessenger
6976
*/
7077
public function __invoke($namespace = null)
7178
{
@@ -98,7 +105,7 @@ public function __call($method, $argv)
98105
* @param null|bool $autoEscape
99106
* @return string
100107
*/
101-
public function render($namespace = PluginFlashMessenger::NAMESPACE_DEFAULT, array $classes = [], $autoEscape = null)
108+
public function render($namespace = 'default', array $classes = [], $autoEscape = null)
102109
{
103110
$flashMessenger = $this->getPluginFlashMessenger();
104111
$messages = $flashMessenger->getMessagesFromNamespace($namespace);
@@ -113,7 +120,7 @@ public function render($namespace = PluginFlashMessenger::NAMESPACE_DEFAULT, arr
113120
* @param bool|null $autoEscape
114121
* @return string
115122
*/
116-
public function renderCurrent($namespace = PluginFlashMessenger::NAMESPACE_DEFAULT, array $classes = [], $autoEscape = null)
123+
public function renderCurrent($namespace = 'default', array $classes = [], $autoEscape = null)
117124
{
118125
$flashMessenger = $this->getPluginFlashMessenger();
119126
$messages = $flashMessenger->getCurrentMessagesFromNamespace($namespace);
@@ -130,7 +137,7 @@ public function renderCurrent($namespace = PluginFlashMessenger::NAMESPACE_DEFAU
130137
* @return string
131138
*/
132139
protected function renderMessages(
133-
$namespace = PluginFlashMessenger::NAMESPACE_DEFAULT,
140+
$namespace = 'default',
134141
array $messages = [],
135142
array $classes = [],
136143
$autoEscape = null
@@ -144,7 +151,7 @@ protected function renderMessages(
144151
if (isset($this->classMessages[$namespace])) {
145152
$classes = $this->classMessages[$namespace];
146153
} else {
147-
$classes = $this->classMessages[PluginFlashMessenger::NAMESPACE_DEFAULT];
154+
$classes = $this->classMessages['default'];
148155
}
149156
$classes = [$classes];
150157
}
@@ -282,24 +289,41 @@ public function getMessageSeparatorString()
282289
/**
283290
* Set the flash messenger plugin
284291
*
285-
* @param PluginFlashMessenger $pluginFlashMessenger
292+
* @param V2PluginFlashMessenger|PluginFlashMessenger $pluginFlashMessenger
286293
* @return FlashMessenger
294+
* @throws InvalidArgumentException for an invalid $pluginFlashMessenger
287295
*/
288-
public function setPluginFlashMessenger(PluginFlashMessenger $pluginFlashMessenger)
296+
public function setPluginFlashMessenger($pluginFlashMessenger)
289297
{
298+
if (! $pluginFlashMessenger instanceof V2PluginFlashMessenger
299+
&& ! $pluginFlashMessenger instanceof PluginFlashMessenger
300+
) {
301+
throw new InvalidArgumentException(sprintf(
302+
'%s expects either a %s or %s instance; received %s',
303+
__METHOD__,
304+
V2PluginFlashMessenger::class,
305+
PluginFlashMessenger::class,
306+
(is_object($pluginFlashMessenger) ? get_class($pluginFlashMessenger) : gettype($pluginFlashMessenger))
307+
));
308+
}
309+
290310
$this->pluginFlashMessenger = $pluginFlashMessenger;
291311
return $this;
292312
}
293313

294314
/**
295315
* Get the flash messenger plugin
296316
*
297-
* @return PluginFlashMessenger
317+
* @return V2PluginFlashMessenger|PluginFlashMessenger
298318
*/
299319
public function getPluginFlashMessenger()
300320
{
301321
if (null === $this->pluginFlashMessenger) {
302-
$this->setPluginFlashMessenger(new PluginFlashMessenger());
322+
$this->setPluginFlashMessenger(
323+
class_exists(PluginFlashMessenger::class)
324+
? new PluginFlashMessenger()
325+
: new V2PluginFlashMessenger()
326+
);
303327
}
304328

305329
return $this->pluginFlashMessenger;

0 commit comments

Comments
 (0)