在 CakePHP 中,如何将控制器文件添加到 /app/controllers/ 目录,从 /core/cake/ 目录中的控制器扩展此 class?

In CakePHP, how to add a controller file to the /app/controllers/ directory, extending this class from a controller in the /core/cake/ directory?

core\cake\libs\controller\images_controller.php 中,我有这个 class:

<?php
class ImagesController extends AppController
{
    ....................
    function view()
    {
        ....................
    }
    ....................
}
?>

问题是我需要修改 ImagesController::view() 的行为,但为了做到这一点,我直接修改了 core\cake\libs\controller\images_controller.php。修改 core\cake\ 不是一个好习惯。我应该改为将代码添加到 app\,覆盖 CakePHP 中的 classes。我打算做的是恢复我对 core\cake\libs\controller\images_controller.php 所做的更改,特别是 ImagesController::view() 方法。然后,我打算在 /app/controllers 目录中添加一个名为 images_controller.php 的控制器文件。 class 将扩展 core\cake\libs\controller\images_controller.php 中的 ImagesController,只需添加新的 view() 函数,这将覆盖核心中的 view() 函数。我认为在 app\core\cake\ 中使用相同的 class 名称是可以的,但我不确定。我可以试试在 /app/controllers 中,我所有的 class 都是从 AppController 扩展而来的。例如:

class UsersController extends AppController{
    ....................
}

但是现在,在我看来,在 /app/controllers 中,我必须创建一个 class 像这样:

class ImagesController extends ImagesController{
    ....................
}

基本上,我试图在 /app/controllers 中创建的 ImagesController class 应该从我在 ImagesController class 中扩展=17=],意思是 extending/inheriting 从这个 class in core\cake\libs\controller\images_controller.php:

<?php
class ImagesController extends AppController
{
    ....................
    function view()
    {
        ....................
    }
    ....................
}
?>

class ImagesController extends ImagesController 对我来说不合适,因为我不确定 CakePHP 是否会理解我试图说 /app/controllers 中我的 class 的名称将是 ImagesController 并且我正在尝试从 core\cake\libs\controller\images_controller.php 中定义的名为 ImagesController 的 class 扩展它。你怎么能做到这一点?谢谢。

要解决您的问题中涉及扩展同名 class 的部分,您可以这样做:

namespace App\Controller

use Foreign\Namespace\Controller\SameNameController as DifferentName

class SameNameController extends DifferentName {

//code here

}

[more details here][https://www.php.net/manual/en/language.namespaces.importing.php]



如评论中所述,CakePHP 核心未附带 ImagesController class,这意味着核心已被修改,文件不应该放在第一名.

只要这是一个简单的错误,并且不受依赖于核心文件夹中存在的文件的其他修改的约束,就可以简单地将其移动到应用程序级别 controllers 文件夹,即 app/controllers/images_controller.php.