Доступ к Cake PHP $ this в настраиваемом классе - PullRequest
0 голосов
/ 02 августа 2020

У меня есть свой собственный класс foo в /src/Utility/foo.php, к которому можно получить доступ в любом скрипте Cake PHP, пока я добавляю use App\Utility\foo; - пока это работает.

Обычно нет проблема передать конструктору PHP объект $this экземпляра вызывающего объекта.

Чтобы получить точное имя экземпляра $this, я получил его в конструкторе своего класса, используя get_class($this) . Это возвращает AdminLTE\View\AdminLTEView

  • Я создаю экземпляр своего пользовательского класса с помощью $fooInstance = new foo($this);.
  • Конструктор моего класса выглядит так: public function __construct(AdminLTE\View\AdminLTEView $appThis)

Использование приведенного выше синтаксиса приводит к этой ошибке:

Аргумент 1, переданный в App \ Utility \ foo :: __ construct (), должен быть экземпляром App \ Utility \ AdminLTE \ View \ AdminLTEView, экземпляр AdminLTE \ View \ AdminLTEView с заданным

Когда я не устанавливаю в конструкторе тип $this, я получаю следующую ошибку Cake PHP сообщение, пытающееся выполнить эту команду: $appThis->request->getAttribute('identity');:

requestHelper не может быть найден.

Хорошо, что я неправильно понял, что мне не хватает, как правильный синтаксис, чтобы я мог использовать $this класса вызывающего абонента в моем пользовательском классе?

1 Ответ

1 голос
/ 03 августа 2020

get_class() возвращает уже разрешенное имя (разрешение происходит во время компиляции), а разрешенные имена не имеют начальных backsla sh, unresolved полностью определенных имен, однако всегда начинаются с backsla sh:

\AdminLTE\View\AdminLTEView

https://php.net/manual/en/language.namespaces.rules.php

View::$request является защищенным свойством, доступ к которому вы не можете получить, находится за пределами области просмотра класса, вам придется вместо этого использовать его метод publi c getRequest():

$appThis->getRequest()->getAttribute('identity');

Доступ к неопределенным свойствам приведет к включению вспомогательного загрузчика magi c представления, так что вы можете, например, $this->Html в вашем представлении / шаблоне, чтобы запустить ленивую загрузку соответствующего помощника, соответствующего этому имени, ie HtmlHelper.

...