CakePHP -动作没有在控制器中定义


CakePHP - Action not defined in controller

我从CakePHP的控制器中得到了缺失的动作,但动作home是在我的控制器中定义的,我为它做了一个空视图。

<?php
class PagesController extends AppController {
    var $name = 'Pages';
    var $uses = array('Event', 'News', 'Person', 'Signup', 'Workshop', 'Course');
    function home() {
        $this->layout = 'main';
    }
    function news() {
    }
    function events() {
    }
}
?>

这是我的路由文件:

<?php
    Router::connect('/login', array('controller' => 'users', 'action' => 'login'));
    Router::connect('/admin/logout', array('controller' => 'users', 'action' => 'logout'));
    Router::connect('/', array('controller' => 'pages', 'action' => 'home'));

试试这个:

<?php
class PagesController extends AppController {
var $name = 'Pages';
var $uses = array('Event', 'News', 'Person', 'Signup', 'Workshop', 'Course');
function display() {
    $path = func_get_args();
    $count = count($path);
    if (!$count) {
        $this->redirect('/');
    }
    $page = $subpage = $title_for_layout = null;
    if (!empty($path[0])) {
        $page = $path[0];
    }
    if (!empty($path[1])) {
        $subpage = $path[1];
    }
    $this->set(compact('page', 'subpage', 'title_for_layout'));
    switch ($page) {
        case 'home':
            $this->_home();
            $this->render('home');
        break;
        default:
            $this->render(implode('/', $path));
    }
}
function _home() {
    $this->layout = 'main';
}
function news() {
}
function events() {
}
}
?>

并将这一行放在你的路由的顶部:

    Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));

在routes.php中删除Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

并修改根路径路由:Router::connect('/', array('controller' => 'pages', 'action' => 'home'));(这是可选的,但也许你会想要)