mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2024-11-15 03:18:26 +00:00
Make full page caching + Themes work.
Dispatcher now uses ThemeView for rendering cache files. This enables nocache blocks to reference theme elements. Fixes #1858
This commit is contained in:
parent
85b86cb282
commit
0e5797d69d
5 changed files with 60 additions and 3 deletions
|
@ -218,8 +218,10 @@ class Dispatcher {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file_exists($filename)) {
|
if (file_exists($filename)) {
|
||||||
|
App::uses('ThemeView', 'View');
|
||||||
|
|
||||||
$controller = null;
|
$controller = null;
|
||||||
$view = new View($controller);
|
$view = new ThemeView($controller);
|
||||||
return $view->renderCache($filename, microtime(true));
|
return $view->renderCache($filename, microtime(true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -442,6 +442,15 @@ class TestCachedPagesController extends Controller {
|
||||||
$this->cacheAction = 10;
|
$this->cacheAction = 10;
|
||||||
$this->helpers[] = 'Form';
|
$this->helpers[] = 'Form';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test cached views with themes.
|
||||||
|
*/
|
||||||
|
public function themed() {
|
||||||
|
$this->cacheAction = 10;
|
||||||
|
$this->viewClass = 'Theme';
|
||||||
|
$this->theme = 'TestTheme';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1424,6 +1433,45 @@ class DispatcherTest extends CakeTestCase {
|
||||||
unlink($filename);
|
unlink($filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test full page caching with themes.
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function testFullPageCachingWithThemes() {
|
||||||
|
Configure::write('Cache.disable', false);
|
||||||
|
Configure::write('Cache.check', true);
|
||||||
|
Configure::write('debug', 2);
|
||||||
|
|
||||||
|
Router::reload();
|
||||||
|
Router::connect('/:controller/:action/*');
|
||||||
|
|
||||||
|
App::build(array(
|
||||||
|
'View' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS),
|
||||||
|
), true);
|
||||||
|
|
||||||
|
$dispatcher = new TestDispatcher();
|
||||||
|
$request = new CakeRequest('/test_cached_pages/themed');
|
||||||
|
$response = new CakeResponse();
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
$dispatcher->dispatch($request, $response);
|
||||||
|
$out = ob_get_clean();
|
||||||
|
|
||||||
|
ob_start();
|
||||||
|
$dispatcher->cached($request->here);
|
||||||
|
$cached = ob_get_clean();
|
||||||
|
|
||||||
|
$result = str_replace(array("\t", "\r\n", "\n"), "", $out);
|
||||||
|
$cached = preg_replace('/<!--+[^<>]+-->/', '', $cached);
|
||||||
|
$expected = str_replace(array("\t", "\r\n", "\n"), "", $cached);
|
||||||
|
|
||||||
|
$this->assertEqual($expected, $result);
|
||||||
|
|
||||||
|
$filename = $this->__cachePath($request->here);
|
||||||
|
unlink($filename);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* testHttpMethodOverrides method
|
* testHttpMethodOverrides method
|
||||||
*
|
*
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
default test_theme layout
|
default test_theme layout
|
||||||
|
<?php echo $content_for_layout ?>
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
posts themed themed file.
|
||||||
|
<!--nocache-->
|
||||||
|
<?php echo $this->element('test_element'); ?>
|
||||||
|
<!--/nocache-->
|
|
@ -38,7 +38,9 @@ class ThemeView extends View {
|
||||||
*/
|
*/
|
||||||
public function __construct($controller) {
|
public function __construct($controller) {
|
||||||
parent::__construct($controller);
|
parent::__construct($controller);
|
||||||
$this->theme = $controller->theme;
|
if ($controller) {
|
||||||
|
$this->theme = $controller->theme;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue