我需要在“/cake/libs/controller/pages_controller.php”中添加新的功能,但我不想直接更改它,因为它是核心的cakephp的一部分,因此我所做的就是复制“pages_controller”。 php“into”app / controllers /“然后我添加了新功能但是我遇到了一些错误,例如”动作显示未在控制器PagesController中定义“。
注意:
有什么问题?为什么我得到那个错误?
这是/app/controllers/pages_controller.php:
<?php
class PagesController extends AppController {
var $name = 'Pages';
var $helpers = array('Html', 'Session');
var $uses = array();
function display_no_layout() {
$this->autoLayout = false; // new line
$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];
}
if (!empty($path[$count - 1])) {
$title_for_layout = Inflector::humanize($path[$count - 1]);
}
$this->set(compact('page', 'subpage', 'title_for_layout'));
$this->render(implode('/', $path));
}
}
我的/app/config/routers.php:
Router::connect('home/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/successfully', array('controller' => 'pages', 'action' => 'display_no_layout', 'successfully'));
答案 0 :(得分:4)
创建时
/app/controllers/pages_controller.php
覆盖
/cake/libs/controller/pages_controller.php
所以display()
需要在你的PagesController中,因为你正在路由它。您可能希望将display()
保留为已复制并编写类似
function display_no_layout() {
$this->autoLayout = false;
$this->display();
}
答案 1 :(得分:0)
由于display()
中的这一行,您的应用可能正在寻找app/config/routes.php
行动:
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
您正尝试访问网页控制器中的操作,但蛋糕正在寻找display()
操作。
修改:看到PagesController
后,错误的唯一可能原因是routes.php
文件