mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 11:28:25 +00:00
updating view loading helpers, fixes #3744, tests added, uses Inflector::slug() for element cache file name, uses renderElement for dump of cakeDebug
git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@6165 3807eeeb-6ff5-0310-8944-8be069107fe0
This commit is contained in:
parent
649840b91a
commit
dcb9996b43
5 changed files with 152 additions and 35 deletions
|
@ -280,7 +280,7 @@ class View extends Object {
|
||||||
$key = null;
|
$key = null;
|
||||||
if (is_array($params['cache'])) {
|
if (is_array($params['cache'])) {
|
||||||
$expires = $params['cache']['time'];
|
$expires = $params['cache']['time'];
|
||||||
$key = convertSlash($params['cache']['key']);
|
$key = Inflector::slug($params['cache']['key']);
|
||||||
} elseif ($params['cache'] !== true) {
|
} elseif ($params['cache'] !== true) {
|
||||||
$expires = $params['cache'];
|
$expires = $params['cache'];
|
||||||
$key = implode('_', array_keys($params));
|
$key = implode('_', array_keys($params));
|
||||||
|
@ -290,7 +290,7 @@ class View extends Object {
|
||||||
if (isset($params['plugin'])) {
|
if (isset($params['plugin'])) {
|
||||||
$plugin = $params['plugin'].'_';
|
$plugin = $params['plugin'].'_';
|
||||||
}
|
}
|
||||||
$cacheFile = 'element_' . $key .'_'. $plugin . convertSlash($name);
|
$cacheFile = 'element_' . $key . '_' . $plugin . Inflector::slug($name);
|
||||||
$cache = cache('views' . DS . $cacheFile, null, $expires);
|
$cache = cache('views' . DS . $cacheFile, null, $expires);
|
||||||
|
|
||||||
if (is_string($cache)) {
|
if (is_string($cache)) {
|
||||||
|
@ -342,7 +342,7 @@ class View extends Object {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($out !== false) {
|
if ($out !== false) {
|
||||||
if ($this->layout && $this->autoLayout) {
|
if ($layout && $this->autoLayout) {
|
||||||
$out = $this->renderLayout($out, $layout);
|
$out = $this->renderLayout($out, $layout);
|
||||||
if (isset($this->loaded['cache']) && (($this->cacheAction != false)) && (Configure::read('Cache.check') === true)) {
|
if (isset($this->loaded['cache']) && (($this->cacheAction != false)) && (Configure::read('Cache.check') === true)) {
|
||||||
$replace = array('<cake:nocache>', '</cake:nocache>');
|
$replace = array('<cake:nocache>', '</cake:nocache>');
|
||||||
|
@ -372,12 +372,18 @@ class View extends Object {
|
||||||
* @return string Rendered output
|
* @return string Rendered output
|
||||||
*/
|
*/
|
||||||
function renderElement($name, $params = array(), $loadHelpers = false) {
|
function renderElement($name, $params = array(), $loadHelpers = false) {
|
||||||
$file = $plugin = false;
|
$file = $plugin = null;
|
||||||
|
|
||||||
if (isset($params['plugin'])) {
|
if (isset($params['plugin'])) {
|
||||||
$plugin = $params['plugin'];
|
$plugin = $params['plugin'];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($this->plugin) && !$plugin) {
|
||||||
|
$plugin = $this->plugin;
|
||||||
|
}
|
||||||
|
|
||||||
$paths = $this->_paths($plugin);
|
$paths = $this->_paths($plugin);
|
||||||
|
|
||||||
foreach ($paths as $path) {
|
foreach ($paths as $path) {
|
||||||
if (file_exists($path . 'elements' . DS . $name . $this->ext)) {
|
if (file_exists($path . 'elements' . DS . $name . $this->ext)) {
|
||||||
$file = $path . 'elements' . DS . $name . $this->ext;
|
$file = $path . 'elements' . DS . $name . $this->ext;
|
||||||
|
@ -394,6 +400,7 @@ class View extends Object {
|
||||||
}
|
}
|
||||||
|
|
||||||
$file = $paths[0] . 'views' . DS . 'elements' . DS . $name . $this->ext;
|
$file = $paths[0] . 'views' . DS . 'elements' . DS . $name . $this->ext;
|
||||||
|
|
||||||
if (Configure::read() > 0) {
|
if (Configure::read() > 0) {
|
||||||
return "Not Found: " . $file;
|
return "Not Found: " . $file;
|
||||||
}
|
}
|
||||||
|
@ -408,8 +415,9 @@ class View extends Object {
|
||||||
$layout_fn = $this->_getLayoutFileName($layout);
|
$layout_fn = $this->_getLayoutFileName($layout);
|
||||||
|
|
||||||
$debug = '';
|
$debug = '';
|
||||||
|
|
||||||
if (Configure::read() > 2 && isset($this->viewVars['cakeDebug'])) {
|
if (Configure::read() > 2 && isset($this->viewVars['cakeDebug'])) {
|
||||||
$debug = View::_render(LIBS . 'view' . DS . 'elements' . DS . 'dump.ctp', array('controller' => $this->viewVars['cakeDebug']), false);
|
$debug = View::renderElement('dump', array('controller' => $this->viewVars['cakeDebug']), false);
|
||||||
unset($this->viewVars['cakeDebug']);
|
unset($this->viewVars['cakeDebug']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -475,7 +483,7 @@ class View extends Object {
|
||||||
header('Content-type: text/xml');
|
header('Content-type: text/xml');
|
||||||
}
|
}
|
||||||
$out = str_replace('<!--cachetime:'.$match['1'].'-->', '', $out);
|
$out = str_replace('<!--cachetime:'.$match['1'].'-->', '', $out);
|
||||||
e($out);
|
echo $out;
|
||||||
die();
|
die();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -611,27 +619,17 @@ class View extends Object {
|
||||||
* @access protected
|
* @access protected
|
||||||
*/
|
*/
|
||||||
function _render($___viewFn, $___dataForView, $loadHelpers = true, $cached = false) {
|
function _render($___viewFn, $___dataForView, $loadHelpers = true, $cached = false) {
|
||||||
|
$loadedHelpers = array();
|
||||||
|
|
||||||
if ($this->helpers != false && $loadHelpers === true) {
|
if ($this->helpers != false && $loadHelpers === true) {
|
||||||
$loadedHelpers = array();
|
|
||||||
$loadedHelpers = $this->_loadHelpers($loadedHelpers, $this->helpers);
|
$loadedHelpers = $this->_loadHelpers($loadedHelpers, $this->helpers);
|
||||||
|
|
||||||
foreach (array_keys($loadedHelpers) as $helper) {
|
foreach (array_keys($loadedHelpers) as $helper) {
|
||||||
$replace = strtolower(substr($helper, 0, 1));
|
$camelBackedHelper = Inflector::variable($helper);
|
||||||
$camelBackedHelper = preg_replace('/\\w/', $replace, $helper, 1);
|
|
||||||
|
|
||||||
${$camelBackedHelper} =& $loadedHelpers[$helper];
|
${$camelBackedHelper} =& $loadedHelpers[$helper];
|
||||||
|
|
||||||
if (is_array(${$camelBackedHelper}->helpers) && !empty(${$camelBackedHelper}->helpers)) {
|
|
||||||
$subHelpers = ${$camelBackedHelper}->helpers;
|
|
||||||
foreach ($subHelpers as $subHelper) {
|
|
||||||
${$camelBackedHelper}->{$subHelper} =& $loadedHelpers[$subHelper];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$this->loaded[$camelBackedHelper] =& ${$camelBackedHelper};
|
$this->loaded[$camelBackedHelper] =& ${$camelBackedHelper};
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->helpers != false && $loadHelpers === true) {
|
|
||||||
foreach ($loadedHelpers as $helper) {
|
foreach ($loadedHelpers as $helper) {
|
||||||
if (is_object($helper)) {
|
if (is_object($helper)) {
|
||||||
if (is_subclass_of($helper, 'Helper') || is_subclass_of($helper, 'helper')) {
|
if (is_subclass_of($helper, 'Helper') || is_subclass_of($helper, 'helper')) {
|
||||||
|
@ -642,8 +640,6 @@ class View extends Object {
|
||||||
}
|
}
|
||||||
|
|
||||||
extract($___dataForView, EXTR_SKIP);
|
extract($___dataForView, EXTR_SKIP);
|
||||||
$BASE = $this->base;
|
|
||||||
$params =& $this->params;
|
|
||||||
|
|
||||||
ob_start();
|
ob_start();
|
||||||
|
|
||||||
|
@ -653,7 +649,7 @@ class View extends Object {
|
||||||
@include ($___viewFn);
|
@include ($___viewFn);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->helpers != false && $loadHelpers === true) {
|
if (!empty($loadedHelpers)) {
|
||||||
foreach ($loadedHelpers as $helper) {
|
foreach ($loadedHelpers as $helper) {
|
||||||
if (is_object($helper)) {
|
if (is_object($helper)) {
|
||||||
if (is_subclass_of($helper, 'Helper') || is_subclass_of($helper, 'helper')) {
|
if (is_subclass_of($helper, 'Helper') || is_subclass_of($helper, 'helper')) {
|
||||||
|
@ -691,10 +687,13 @@ class View extends Object {
|
||||||
*
|
*
|
||||||
* @param array $loaded List of helpers that are already loaded.
|
* @param array $loaded List of helpers that are already loaded.
|
||||||
* @param array $helpers List of helpers to load.
|
* @param array $helpers List of helpers to load.
|
||||||
|
* @param string $parent holds name of helper, if loaded helper has helpers
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
function &_loadHelpers(&$loaded, $helpers) {
|
function &_loadHelpers(&$loaded, $helpers, $parent = null) {
|
||||||
$helpers[] = 'Session';
|
if (empty($loaded)) {
|
||||||
|
$helpers[] = 'Session';
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($helpers as $helper) {
|
foreach ($helpers as $helper) {
|
||||||
$parts = preg_split('/\/|\./', $helper);
|
$parts = preg_split('/\/|\./', $helper);
|
||||||
|
@ -729,25 +728,26 @@ class View extends Object {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$camelBackedHelper = Inflector::variable($helper);
|
$loaded[$helper] =& new $helperCn();
|
||||||
${$camelBackedHelper} =& new $helperCn();
|
|
||||||
|
|
||||||
$vars = array('base', 'webroot', 'here', 'params', 'action', 'data', 'themeWeb', 'plugin');
|
$vars = array('base', 'webroot', 'here', 'params', 'action', 'data', 'themeWeb', 'plugin');
|
||||||
$c = count($vars);
|
$c = count($vars);
|
||||||
for ($j = 0; $j < $c; $j++) {
|
for ($j = 0; $j < $c; $j++) {
|
||||||
${$camelBackedHelper}->{$vars[$j]} = $this->{$vars[$j]};
|
$loaded[$helper]->{$vars[$j]} = $this->{$vars[$j]};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($this->validationErrors)) {
|
if (!empty($this->validationErrors)) {
|
||||||
${$camelBackedHelper}->validationErrors = $this->validationErrors;
|
$loaded[$helper]->validationErrors = $this->validationErrors;
|
||||||
}
|
}
|
||||||
|
|
||||||
$loaded[$helper] =& ${$camelBackedHelper};
|
if (is_array($loaded[$helper]->helpers) && !empty($loaded[$helper]->helpers)) {
|
||||||
|
$loaded =& $this->_loadHelpers($loaded, $loaded[$helper]->helpers, $helper);
|
||||||
if (is_array(${$camelBackedHelper}->helpers)) {
|
|
||||||
$loaded = &$this->_loadHelpers($loaded, ${$camelBackedHelper}->helpers);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($loaded[$parent])) {
|
||||||
|
$loaded[$parent]->{$helper} =& $loaded[$helper];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $loaded;
|
return $loaded;
|
||||||
}
|
}
|
||||||
|
@ -821,12 +821,14 @@ class View extends Object {
|
||||||
$name = $this->layout;
|
$name = $this->layout;
|
||||||
}
|
}
|
||||||
$subDir = null;
|
$subDir = null;
|
||||||
|
|
||||||
if (!is_null($this->layoutPath)) {
|
if (!is_null($this->layoutPath)) {
|
||||||
$subDir = $this->layoutPath . DS;
|
$subDir = $this->layoutPath . DS;
|
||||||
}
|
}
|
||||||
|
|
||||||
$paths = $this->_paths($this->plugin);
|
$paths = $this->_paths($this->plugin);
|
||||||
$file = 'layouts' . DS . $subDir . $name;
|
$file = 'layouts' . DS . $subDir . $name;
|
||||||
|
|
||||||
foreach ($paths as $path) {
|
foreach ($paths as $path) {
|
||||||
if (file_exists($path . $file . $this->ext)) {
|
if (file_exists($path . $file . $this->ext)) {
|
||||||
return $path . $file . $this->ext;
|
return $path . $file . $this->ext;
|
||||||
|
|
|
@ -281,6 +281,10 @@ class InflectorTest extends UnitTestCase {
|
||||||
$result = $this->Inflector->slug('Foo Bar: Not just for breakfast any-more');
|
$result = $this->Inflector->slug('Foo Bar: Not just for breakfast any-more');
|
||||||
$expected = 'Foo_Bar_Not_just_for_breakfast_any_more';
|
$expected = 'Foo_Bar_Not_just_for_breakfast_any_more';
|
||||||
$this->assertEqual($result, $expected);
|
$this->assertEqual($result, $expected);
|
||||||
|
|
||||||
|
$result = $this->Inflector->slug('this/is/a/path');
|
||||||
|
$expected = 'this_is_a_path';
|
||||||
|
$this->assertEqual($result, $expected);
|
||||||
|
|
||||||
$result = $this->Inflector->slug('Foo Bar: Not just for breakfast any-more', "-");
|
$result = $this->Inflector->slug('Foo Bar: Not just for breakfast any-more', "-");
|
||||||
$expected = 'Foo-Bar-Not-just-for-breakfast-any-more';
|
$expected = 'Foo-Bar-Not-just-for-breakfast-any-more';
|
||||||
|
|
|
@ -51,6 +51,10 @@ class TestView extends View {
|
||||||
return $this->_getLayoutFileName($name);
|
return $this->_getLayoutFileName($name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function loadHelpers(&$loaded, $helpers, $parent = null) {
|
||||||
|
return $this->_loadHelpers($loaded, $helpers, $parent);
|
||||||
|
}
|
||||||
|
|
||||||
function cakeError($name, $params) {
|
function cakeError($name, $params) {
|
||||||
return $name;
|
return $name;
|
||||||
}
|
}
|
||||||
|
@ -120,7 +124,7 @@ class ViewTest extends UnitTestCase {
|
||||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'layouts' . DS . 'rss' . DS . 'default.ctp';
|
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'tests' . DS . 'test_app' . DS . 'views' . DS . 'layouts' . DS . 'rss' . DS . 'default.ctp';
|
||||||
$result = $View->getLayoutFileName();
|
$result = $View->getLayoutFileName();
|
||||||
$this->assertEqual($result, $expected);
|
$this->assertEqual($result, $expected);
|
||||||
|
|
||||||
$View->layoutPath = 'email' . DS . 'html';
|
$View->layoutPath = 'email' . DS . 'html';
|
||||||
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'layouts' . DS . 'email' . DS . 'html' . DS . 'default.ctp';
|
$expected = TEST_CAKE_CORE_INCLUDE_PATH . 'libs' . DS . 'view' . DS . 'layouts' . DS . 'email' . DS . 'html' . DS . 'default.ctp';
|
||||||
$result = $View->getLayoutFileName();
|
$result = $View->getLayoutFileName();
|
||||||
|
@ -200,9 +204,9 @@ class ViewTest extends UnitTestCase {
|
||||||
|
|
||||||
$cached = false;
|
$cached = false;
|
||||||
$result = $View->element($element, array('cache'=>array('time'=>'+1 second', 'key'=>'/whatever/here')));
|
$result = $View->element($element, array('cache'=>array('time'=>'+1 second', 'key'=>'/whatever/here')));
|
||||||
if(file_exists(CACHE . 'views' . DS . 'element_'.convertSlash('/whatever/here').'_'.$element)) {
|
if(file_exists(CACHE . 'views' . DS . 'element_'.Inflector::slug('/whatever/here').'_'.$element)) {
|
||||||
$cached = true;
|
$cached = true;
|
||||||
unlink(CACHE . 'views' . DS . 'element_'.convertSlash('/whatever/here').'_'.$element);
|
unlink(CACHE . 'views' . DS . 'element_'.Inflector::slug('/whatever/here').'_'.$element);
|
||||||
}
|
}
|
||||||
$this->assertTrue($cached);
|
$this->assertTrue($cached);
|
||||||
|
|
||||||
|
@ -217,6 +221,50 @@ class ViewTest extends UnitTestCase {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function testLoadHelpers() {
|
||||||
|
$View = new TestView($this->PostsController);
|
||||||
|
|
||||||
|
$loaded = array();
|
||||||
|
$result = $View->loadHelpers($loaded, array('Html', 'Form', 'Ajax'));
|
||||||
|
$this->assertTrue(is_object($result['Html']));
|
||||||
|
$this->assertTrue(is_object($result['Form']));
|
||||||
|
$this->assertTrue(is_object($result['Form']->Html));
|
||||||
|
$this->assertTrue(is_object($result['Ajax']->Html));
|
||||||
|
|
||||||
|
$View->plugin = 'test_plugin';
|
||||||
|
$result = $View->loadHelpers($loaded, array('TestPlugin.TestPluginHelper'));
|
||||||
|
$this->assertTrue(is_object($result['TestPluginHelper']));
|
||||||
|
$this->assertTrue(is_object($result['TestPluginHelper']->TestPluginOtherHelper));
|
||||||
|
}
|
||||||
|
|
||||||
|
function testRender() {
|
||||||
|
$this->PostsController->helpers = array('Html', 'Form', 'Ajax');
|
||||||
|
$View = new TestView($this->PostsController);
|
||||||
|
|
||||||
|
$result = $View->_render($View->getViewFileName('index'), array());
|
||||||
|
$this->assertEqual($result, 'posts index');
|
||||||
|
|
||||||
|
$helpers = $View->loaded;
|
||||||
|
$this->assertTrue(is_object($helpers['html']));
|
||||||
|
$this->assertTrue(is_object($helpers['form']));
|
||||||
|
$this->assertTrue(is_object($helpers['form']->Html));
|
||||||
|
$this->assertTrue(is_object($helpers['ajax']->Html));
|
||||||
|
|
||||||
|
$this->PostsController->helpers = array('Html', 'Form', 'Ajax', 'TestPlugin.TestPluginHelper');
|
||||||
|
$View = new TestView($this->PostsController);
|
||||||
|
|
||||||
|
$result = $View->_render($View->getViewFileName('index'), array());
|
||||||
|
$this->assertEqual($result, 'posts index');
|
||||||
|
|
||||||
|
$helpers = $View->loaded;
|
||||||
|
$this->assertTrue(is_object($helpers['html']));
|
||||||
|
$this->assertTrue(is_object($helpers['form']));
|
||||||
|
$this->assertTrue(is_object($helpers['form']->Html));
|
||||||
|
$this->assertTrue(is_object($helpers['ajax']->Html));
|
||||||
|
$this->assertTrue(is_object($helpers['testPluginHelper']->TestPluginOtherHelper));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
function tearDown() {
|
function tearDown() {
|
||||||
unset($this->View);
|
unset($this->View);
|
||||||
unset($this->PostsController);
|
unset($this->PostsController);
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?php
|
||||||
|
/* SVN FILE: $Id$ */
|
||||||
|
/**
|
||||||
|
* Short description for file.
|
||||||
|
*
|
||||||
|
* Long description for file
|
||||||
|
*
|
||||||
|
* PHP versions 4 and 5
|
||||||
|
*
|
||||||
|
* CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
|
||||||
|
* Copyright 2005-2007, Cake Software Foundation, Inc.
|
||||||
|
* 1785 E. Sahara Avenue, Suite 490-204
|
||||||
|
* Las Vegas, Nevada 89104
|
||||||
|
*
|
||||||
|
* Licensed under The Open Group Test Suite License
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @filesource
|
||||||
|
* @copyright Copyright 2005-2007, Cake Software Foundation, Inc.
|
||||||
|
* @link https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
|
||||||
|
* @package cake.tests
|
||||||
|
* @subpackage cake.tests.test_app.plugins.test_plugin.views.helpers
|
||||||
|
* @since CakePHP(tm) v 1.2.0.4206
|
||||||
|
* @version $Revision$
|
||||||
|
* @modifiedby $LastChangedBy$
|
||||||
|
* @lastmodified $Date$
|
||||||
|
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||||
|
*/
|
||||||
|
class TestPluginHelperHelper extends AppHelper {
|
||||||
|
|
||||||
|
var $helpers = array('TestPlugin.TestPluginOtherHelper');
|
||||||
|
}
|
||||||
|
?>
|
|
@ -0,0 +1,30 @@
|
||||||
|
<?php
|
||||||
|
/* SVN FILE: $Id$ */
|
||||||
|
/**
|
||||||
|
* Short description for file.
|
||||||
|
*
|
||||||
|
* Long description for file
|
||||||
|
*
|
||||||
|
* PHP versions 4 and 5
|
||||||
|
*
|
||||||
|
* CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
|
||||||
|
* Copyright 2005-2007, Cake Software Foundation, Inc.
|
||||||
|
* 1785 E. Sahara Avenue, Suite 490-204
|
||||||
|
* Las Vegas, Nevada 89104
|
||||||
|
*
|
||||||
|
* Licensed under The Open Group Test Suite License
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @filesource
|
||||||
|
* @copyright Copyright 2005-2007, Cake Software Foundation, Inc.
|
||||||
|
* @link https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
|
||||||
|
* @package cake.tests
|
||||||
|
* @subpackage cake.tests.test_app.plugins.test_plugin.views.helpers
|
||||||
|
* @since CakePHP(tm) v 1.2.0.4206
|
||||||
|
* @version $Revision$
|
||||||
|
* @modifiedby $LastChangedBy$
|
||||||
|
* @lastmodified $Date$
|
||||||
|
* @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
|
||||||
|
*/
|
||||||
|
class TestPluginOtherHelperHelper extends AppHelper{}
|
||||||
|
?>
|
Loading…
Reference in a new issue