diff --git a/lib/Cake/Routing/Route/CakeRoute.php b/lib/Cake/Routing/Route/CakeRoute.php index 53fc5e35490..e845d470d33 100644 --- a/lib/Cake/Routing/Route/CakeRoute.php +++ b/lib/Cake/Routing/Route/CakeRoute.php @@ -546,4 +546,22 @@ protected function _writeUrl($params) { return $out; } + /** + * Set state magic method to support var_export + * + * This method helps for applications that want to implement + * router caching. + * + * @param array $fields + * @return CakeRoute + */ + public static function __set_state($fields) { + $class = function_exists('get_called_class') ? get_called_class() : __CLASS__; + $obj = new $class(''); + foreach ($fields as $field => $value) { + $obj->$field = $value; + } + return $obj; + } + } diff --git a/lib/Cake/Test/Case/Routing/Route/CakeRouteTest.php b/lib/Cake/Test/Case/Routing/Route/CakeRouteTest.php index 46c293d9534..d07aca90778 100644 --- a/lib/Cake/Test/Case/Routing/Route/CakeRouteTest.php +++ b/lib/Cake/Test/Case/Routing/Route/CakeRouteTest.php @@ -977,4 +977,15 @@ public function testUTF8PatternOnSection() { $this->assertEquals($expected, $result); } +/** + * Test for var_export on CakeRoute + * + * @return void + */ + public function testSetState() { + $route = new CakeRoute('/', array('controller' => 'pages', 'action' => 'display', 'home')); + $retrievedRoute = eval('return ' . var_export($route, true) . ';'); + $this->assertEquals($route, $retrievedRoute); + } + }