在 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
.
在 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
.