【发布时间】:2020-05-20 19:04:27
【问题描述】:
在core\cake\libs\controller\images_controller.php,我有这个类:
<?php
class ImagesController extends AppController
{
....................
function view()
{
....................
}
....................
}
?>
问题是我需要修改ImagesController::view() 的行为,但为了做到这一点,我直接修改了core\cake\libs\controller\images_controller.php。修改core\cake\ 不是一个好习惯。我应该将代码添加到app\,而不是覆盖 CakePHP 中的类。我打算做的是恢复我对core\cake\libs\controller\images_controller.php 所做的更改,特别是对ImagesController::view() 方法的更改。然后,我打算将一个名为images_controller.php 的控制器文件添加到/app/controllers 目录中。此类将扩展core\cake\libs\controller\images_controller.php 中的ImagesController,只需添加新的view() 函数,该函数将覆盖核心中的view() 函数。我认为在app\ 和core\cake\ 中使用相同的类名是可以的,但我不确定。我可以试试。在/app/controllers 中,我所有的课程都从AppController 扩展而来。例如:
class UsersController extends AppController{
....................
}
但现在,在我看来,在 /app/controllers 中,我必须创建一个这样的类:
class ImagesController extends ImagesController{
....................
}
基本上,我试图在/app/controllers 中创建的ImagesController 类应该从我在core\cake\libs\controller\images_controller.php 中拥有的ImagesController 类扩展,这意味着从core\cake\libs\controller\images_controller.php 中的此类扩展/继承:
<?php
class ImagesController extends AppController
{
....................
function view()
{
....................
}
....................
}
?>
class ImagesController extends ImagesController 对我来说看起来不正确,因为我不确定 CakePHP 是否会理解我想说我在/app/controllers 中的班级名称将是ImagesController 并且我正在尝试扩展它来自 core\cake\libs\controller\images_controller.php 中定义的名为 ImagesController 的类。你怎么能做到这一点?谢谢。
【问题讨论】:
-
CakePHP 核心中没有图像控制器之类的东西,也就是说,无论你在那里做什么,都已经有一个修改过的核心。
-
@ndm 换句话说,
class ImagesController extends AppController本来就不应该写在core\cake\libs\controller\images_controller.php中。我所要做的就是将class ImagesController extends AppController从core/cake/libs/controller/images_controller.php移动到/app/controllers/images_controller.php,对吗? -
理论上应该可行,是的,但我不确定创建文件的人在这样做时的想法,以及他们可能做了哪些其他事情可能会阻止这种情况发生在职的。理想情况下,该应用程序已被测试用例正确覆盖,因此您可以简单地尝试查看。
-
@ndm 你是对的。它按照您的建议工作,只需将文件从
core/cake/...移动到app/...。谢谢你。请写下您的评论作为答案,以便我接受并将此问题标记为最佳答案。
标签: php inheritance cakephp cakephp-1.3 cakephp-1.2