mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 11:28:25 +00:00
Adding the ability to pass additional information into the rendering of flash messages. Allows you to keep keep code DRY by moving repeated settings into the view.
Added tests. Fixes #792
This commit is contained in:
parent
e1b3703c20
commit
c64dd9d352
2 changed files with 71 additions and 12 deletions
|
@ -32,7 +32,7 @@ class SessionHelper extends AppHelper {
|
|||
/**
|
||||
* Used to read a session values set in a controller for a key or return values for all keys.
|
||||
*
|
||||
* In your view: `$session->read('Controller.sessKey');`
|
||||
* In your view: `$this->Session->read('Controller.sessKey');`
|
||||
* Calling the method without a param will return all session vars
|
||||
*
|
||||
* @param string $name the name of the session key you want to read
|
||||
|
@ -46,7 +46,7 @@ class SessionHelper extends AppHelper {
|
|||
/**
|
||||
* Used to check is a session key has been set
|
||||
*
|
||||
* In your view: `$session->check('Controller.sessKey');`
|
||||
* In your view: `$this->Session->check('Controller.sessKey');`
|
||||
*
|
||||
* @param string $name
|
||||
* @return boolean
|
||||
|
@ -59,7 +59,7 @@ class SessionHelper extends AppHelper {
|
|||
/**
|
||||
* Returns last error encountered in a session
|
||||
*
|
||||
* In your view: `$session->error();`
|
||||
* In your view: `$this->Session->error();`
|
||||
*
|
||||
* @return string last error
|
||||
* @link http://book.cakephp.org/view/1466/Methods
|
||||
|
@ -71,32 +71,64 @@ class SessionHelper extends AppHelper {
|
|||
/**
|
||||
* Used to render the message set in Controller::Session::setFlash()
|
||||
*
|
||||
* In your view: $session->flash('somekey');
|
||||
* In your view: $this->Session->flash('somekey');
|
||||
* Will default to flash if no param is passed
|
||||
*
|
||||
* You can pass additional information into the flash message generation. This allows you
|
||||
* to consolidate all the parameters for a given type of flash message into the view.
|
||||
*
|
||||
* {{{
|
||||
* echo $this->Session->flash('flash', array('params' => array('class' => 'new-flash')));
|
||||
* }}}
|
||||
*
|
||||
* The above would generate a flash message with a custom class name. Using $attrs['params'] you
|
||||
* can pass additional data into the element rendering that will be made available as local variables
|
||||
* when the element is rendered:
|
||||
*
|
||||
* {{{
|
||||
* echo $this->Session->flash('flash', array('params' => array('name' => $user['User']['name'])));
|
||||
* }}}
|
||||
*
|
||||
* This would pass the current user's name into the flash message, so you could create peronsonalized
|
||||
* messages without the controller needing access to that data.
|
||||
*
|
||||
* Lastly you can choose the element that is rendered when creating the flash message. Using
|
||||
* custom elements allows you to fully customize how flash messages are generated.
|
||||
*
|
||||
* {{{
|
||||
* echo $this->Session->flash('flash', array('element' => 'my_custom_element'));
|
||||
* }}}
|
||||
*
|
||||
* @param string $key The [Message.]key you are rendering in the view.
|
||||
* @return boolean|string Will return the value if $key is set, or false if not set.
|
||||
* @return array $attrs Additional attributes to use for the creation of this flash message.
|
||||
* Supports the 'params', and 'element' keys that are used in the helper.
|
||||
* @access public
|
||||
* @link http://book.cakephp.org/view/1466/Methods
|
||||
* @link http://book.cakephp.org/view/1467/flash
|
||||
*/
|
||||
public function flash($key = 'flash') {
|
||||
public function flash($key = 'flash', $attrs = array()) {
|
||||
$out = false;
|
||||
|
||||
if (CakeSession::check('Message.' . $key)) {
|
||||
$flash = CakeSession::read('Message.' . $key);
|
||||
$message = $flash['message'];
|
||||
unset($flash['message']);
|
||||
|
||||
if (!empty($attrs)) {
|
||||
$flash = array_merge($flash, $attrs);
|
||||
}
|
||||
|
||||
if ($flash['element'] == 'default') {
|
||||
$class = 'message';
|
||||
if (!empty($flash['params']['class'])) {
|
||||
$class = $flash['params']['class'];
|
||||
}
|
||||
$out = '<div id="' . $key . 'Message" class="' . $class . '">' . $flash['message'] . '</div>';
|
||||
$out = '<div id="' . $key . 'Message" class="' . $class . '">' . $message . '</div>';
|
||||
} elseif ($flash['element'] == '' || $flash['element'] == null) {
|
||||
$out = $flash['message'];
|
||||
$out = $message;
|
||||
} else {
|
||||
$tmpVars = $flash['params'];
|
||||
$tmpVars['message'] = $flash['message'];
|
||||
$tmpVars['message'] = $message;
|
||||
$out = $this->_View->element($flash['element'], $tmpVars);
|
||||
}
|
||||
CakeSession::delete('Message.' . $key);
|
||||
|
|
|
@ -119,19 +119,19 @@ class SessionHelperTest extends CakeTestCase {
|
|||
* @return void
|
||||
*/
|
||||
function testFlash() {
|
||||
$result = $this->Session->flash('flash', true);
|
||||
$result = $this->Session->flash('flash');
|
||||
$expected = '<div id="flashMessage" class="message">This is a calling</div>';
|
||||
$this->assertEqual($result, $expected);
|
||||
$this->assertFalse($this->Session->check('Message.flash'));
|
||||
|
||||
$expected = '<div id="classyMessage" class="positive">Recorded</div>';
|
||||
$result = $this->Session->flash('classy', true);
|
||||
$result = $this->Session->flash('classy');
|
||||
$this->assertEqual($result, $expected);
|
||||
|
||||
App::build(array(
|
||||
'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS)
|
||||
));
|
||||
$result = $this->Session->flash('notification', true);
|
||||
$result = $this->Session->flash('notification');
|
||||
$result = str_replace("\r\n", "\n", $result);
|
||||
$expected = "<div id=\"notificationLayout\">\n\t<h1>Alert!</h1>\n\t<h3>Notice!</h3>\n\t<p>This is a test of the emergency broadcasting system</p>\n</div>";
|
||||
$this->assertEqual($result, $expected);
|
||||
|
@ -143,4 +143,31 @@ class SessionHelperTest extends CakeTestCase {
|
|||
$this->assertFalse($this->Session->check('Message.bare'));
|
||||
}
|
||||
|
||||
/**
|
||||
* test flash() with the attributes.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testFlashAttributes() {
|
||||
$result = $this->Session->flash('flash', array('params' => array('class' => 'test-message')));
|
||||
$expected = '<div id="flashMessage" class="test-message">This is a calling</div>';
|
||||
$this->assertEqual($result, $expected);
|
||||
$this->assertFalse($this->Session->check('Message.flash'));
|
||||
}
|
||||
|
||||
/**
|
||||
* test setting the element from the attrs.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function testFlashElementInAttrs() {
|
||||
App::build(array(
|
||||
'views' => array(TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views'. DS)
|
||||
));
|
||||
$result = $this->Session->flash('flash', array(
|
||||
'element' => 'session_helper',
|
||||
'params' => array('title' => 'Notice!', 'name' => 'Alert!')
|
||||
));
|
||||
$expected = "<div id=\"notificationLayout\">\n\t<h1>Alert!</h1>\n\t<h3>Notice!</h3>\n\t<p>This is a calling</p>\n</div>";
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue