NEW: Page types no longer require a controller, they can inherit the parent page type's

Use ClassInfo::ancestry() instead of get_parent_class()

Fall back to ContentController by default
This commit is contained in:
Loz Calver 2013-10-23 14:54:07 +01:00
parent 3d9fc2cc4c
commit b6589ba9a9
1 changed files with 10 additions and 3 deletions

View File

@ -16,9 +16,16 @@ class ModelAsController extends Controller implements NestedController {
* @param string $action
* @return ContentController
*/
static public function controller_for(SiteTree $sitetree, $action = null) {
if($sitetree->class == 'SiteTree') $controller = "ContentController";
else $controller = "{$sitetree->class}_Controller";
public static function controller_for(SiteTree $sitetree, $action = null) {
if ($sitetree->class == 'SiteTree') {
$controller = "ContentController";
} else {
$ancestry = ClassInfo::ancestry($sitetree->class);
while ($class = array_pop($ancestry)) {
if (class_exists($class . "_Controller")) break;
}
$controller = ($class !== null) ? "{$class}_Controller" : "ContentController";
}
if($action && class_exists($controller . '_' . ucfirst($action))) {
$controller = $controller . '_' . ucfirst($action);