【问题标题】:CakePHP - Action not defined in controllerCakePHP - 控制器中未定义的操作
【发布时间】:2026-02-15 05:50:01
【问题描述】:

我从 CakePHP 获得了控制器中缺少的动作,但动作主页是在我的控制器中定义的,我已经为它创建了一个空视图。

<?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'));

【问题讨论】:

  • 您尝试从哪个 URL 访问该页面?
  • 如果修改PagesController,也需要修改默认路由。
  • 这看起来不是一个很好的方法。页面控制器用于静态内容;并且您不应该像这样将所有模型都包含在 uses 数组中 - 这被认为是不好的做法。
  • 我用路由文件更新了帖子,还是不行,不知道是什么问题

标签: php cakephp controller


【解决方案1】:

试试这个:

<?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'));

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 已经注释掉了,我加了路由,还是不行
    • 你在路线上还有什么吗?
    • 为我的登录和注销操作路由
    • 对此还有其他想法吗?我用我的路线文件更新了我的帖子
    • 访问localhost/trunk/dafe/会得到什么
    最近更新 更多