В Cake PHP как добавить файл контроллера в каталог / app / controllers /, расширяя этот класс из контроллера в каталоге / core / cake /? - PullRequest
0 голосов
/ 05 февраля 2020

В 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\, переопределяя классы в Cake PHP. То, что я планирую сделать, - это вернуть сделанные мной изменения в core\cake\libs\controller\images_controller.php, в частности, в метод ImagesController::view(). Затем я планирую добавить файл контроллера с именем images_controller.php в каталог /app/controllers. Этот класс расширит ImagesController в core\cake\libs\controller\images_controller.php, просто добавив новую функцию view(), которая переопределит функцию view() в ядре. Я думаю, что использовать одно и то же имя класса в app\ и core\cake\ можно, но я не уверен. Я могу попробовать это. В /app/controllers все мои занятия начинаются с AppController. Например:

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

Но теперь мне кажется, что в /app/controllers я должен был бы создать такой класс:

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

По сути, ImagesController класс, который я пытаюсь создать в /app/controllers, должен быть расширен от класса ImagesController, который есть в core\cake\libs\controller\images_controller.php, что означает расширение / наследование от этого класса в core\cake\libs\controller\images_controller.php:

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

class ImagesController extends ImagesController мне не подходит, потому что я не уверен, что Cake PHP поймет, что я пытаюсь сказать, что имя моего класса в /app/controllers будет ImagesController и что я пытаюсь расширить его от класс с именем ImagesController, определенный в core\cake\libs\controller\images_controller.php. Как ты мог этого достичь? Спасибо.

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Как упоминалось в комментариях, ядро ​​Cake PHP не поставляется с классом ImagesController, что означает, что ядро ​​было изменено, и файл не должен был помещаться туда в первую очередь.

Поскольку это была простая ошибка, и это не связано с другими изменениями, которые зависят от наличия файла в основной папке, должна быть возможность просто переместить его в папку уровня приложения controllers , ie до app/controllers/images_controller.php.

0 голосов
/ 05 февраля 2020

Чтобы ответить на ту часть вашего вопроса, которая связана с расширением одноименного класса, вы должны сделать что-то вроде этого:

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]



Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...