Browse Source

Look for elements under Flash folder, add plugin support

Bryan Crowe 11 years ago
parent
commit
9bfc86d648

+ 15 - 4
src/Controller/Component/FlashComponent.php

@@ -78,6 +78,16 @@ class FlashComponent extends Component {
 			$message = $message->getMessage();
 		}
 
+		if ($opts['element'] !== null) {
+			list($plugin, $element) = pluginSplit($opts['element']);
+
+			if ($plugin) {
+				$opts['element'] = $plugin . '.Flash/' . $element;
+			} else {
+				$opts['element'] = 'Flash/' . $element;
+			}
+		}
+
 		$this->_session->write('Flash.' . $opts['key'], [
 			'message' => $message,
 			'key' => $opts['key'],
@@ -90,15 +100,16 @@ class FlashComponent extends Component {
  * Magic method for verbose flash methods based on element names.
  *
  * For example: $this->Flash->success('My message') would use the
- * flash_success.ctp element for rendering the flash message.
+ * success.ctp element under `Template/Element/Flash` for rendering the
+ * flash message.
  *
- * @param string $name Element name to use, omitting the "flash_" prefix.
- * @param array $args Parameters to pass when calling `FlashComponent::set`.
+ * @param string $name Element name to use.
+ * @param array $args Parameters to pass when calling `FlashComponent::set()`.
  * @return void
  * @throws \Cake\Error\InternalErrorException If missing the flash message.
 */
 	public function __call($name, $args) {
-		$options = ['element' => 'flash_' . Inflector::underscore($name)];
+		$options = ['element' => Inflector::underscore($name)];
 
 		if (count($args) < 1) {
 			throw new InternalErrorException('Flash message missing.');

+ 2 - 2
tests/TestCase/Controller/Component/FlashComponentTest.php

@@ -76,7 +76,7 @@ class FlashComponentTest extends TestCase {
 		$expected = [
 			'message' => 'This is a test message',
 			'key' => 'flash',
-			'element' => 'test',
+			'element' => 'Flash/test',
 			'params' => ['foo' => 'bar']
 		];
 		$result = $this->Session->read('Flash.flash');
@@ -86,7 +86,7 @@ class FlashComponentTest extends TestCase {
 		$expected = [
 			'message' => 'This is a test message',
 			'key' => 'flash',
-			'element' => 'MyPlugin.alert',
+			'element' => 'MyPlugin.Flash/alert',
 			'params' => []
 		];
 		$result = $this->Session->read('Flash.flash');

+ 2 - 2
tests/TestCase/View/Helper/FlashHelperTest.php

@@ -146,8 +146,8 @@ class FlashHelperTest extends TestCase {
 	public function testFlashWithPluginElement() {
 		Plugin::load('TestPlugin');
 
-		$result = $this->Flash->render('flash', array('element' => 'TestPlugin.plugin_element'));
-		$expected = 'this is the plugin element using params[plugin]';
+		$result = $this->Flash->render('flash', array('element' => 'TestPlugin.Flash/plugin_element'));
+		$expected = 'this is the plugin element';
 		$this->assertEquals($expected, $result);
 	}
 }