Ошибка типа, связанная с XF Pub Controller AbstractController

#php #typeerror #xenforo

#php #ошибка типа #xenforo

Вопрос:

Отказ от ответственности: Я новичок в программировании XenForo 2.X, пожалуйста, будьте полегче со мной.

 An exception occurred: [TypeError] Argument 1 passed to 
PagesProviders::getData() must be an instance of 
XFPubControllerAbstractController, string given in 
src/addons/Pages/Providers.php on line 23

PagesProviders::getData()
call_user_func() in src/XF/Template/Templater.php at line 1382
XFTemplateTemplater->callback() in internal_data/code_cache/templates/l1/s2/public/_page_node.100.php at line 13
XFTemplateTemplater->{closure}() in src/XF/Template/Templater.php at line 1294
XFTemplateTemplater->renderTemplate() in src/XF/Template/Templater.php at line 1367
XFTemplateTemplater->includeTemplate() in internal_data/code_cache/templates/l1/s2/public/page_view.php at line 82
XFTemplateTemplater->{closure}() in src/XF/Template/Templater.php at line 1294
XFTemplateTemplater->renderTemplate() in src/XF/Template/Template.php at line 24
XFTemplateTemplate->render() in src/XF/Mvc/Renderer/Html.php at line 48
XFMvcRendererHtml->renderView() in src/XF/Mvc/Dispatcher.php at line 418
XFMvcDispatcher->renderView() in src/XF/Mvc/Dispatcher.php at line 400
XFMvcDispatcher->renderReply() in src/XF/Mvc/Dispatcher.php at line 360
XFMvcDispatcher->render() in src/XF/Mvc/Dispatcher.php at line 53
XFMvcDispatcher->run() in src/XF/App.php at line 2177
XFApp->run() in src/XF.php at line 390
XF::runApp() in index.php at line 20
  

Я не могу понять, что я делаю не так… Вот мой текущий план атаки, у меня есть очень короткий фрагмент кода (функция включена ниже), который я хотел бы вызвать на странице XenForo с использованием обратного вызова PHP. Критерием для обратного вызова является использование контроллера и ссылки на ответ, как указано в xf:

  1. XFPubControllerAbstractController $controller Экземпляр контроллера. Из этого вы можете проверить запрос, ответ и т.д.
  2. XFMvcReplyAbstractReply amp;$reply Стандартный ответ от контроллера страницы.

обратный вызов, который включен в узел, являющийся страницей, является PagesProviders::getData() . Но запуск so выдает мне ошибку типа. Насколько я понимаю, это кричит на меня, что $controller параметр 1 имеет неправильный тип, но как? Мне это даже не нужно для моего кода. Любые идеи о том, как решить эту проблему, будут оценены! Спасибо.

 <?php

namespace Pages;

class Providers
{
    /**
     * @param XFPubControllerAbstractController $controller
     * @param XFMvcReplyAbstractReply           amp;$reply
     */
    public static function getData(
        XFPubControllerAbstractController $controller,
        XFMvcReplyAbstractReply amp;$reply
    ) {
        if ($reply instanceof XFMvcReplyView) {
                $finder = XF::finder('XF:Thread');
                $thread = $finder->where('thread_id', 1)->fetchOne();
                $firstPost = XF::app()->finder('XF:Post')->where('post_id', $thread['first_post_id'])->fetchOne();
                $viewParams = [
                    'title' => $thread['title'],
                    'message' => $firstPost['message']
                ];

                // return $firstPost['message'];
                $reply->setParam('providers', $viewParams);
        }
    }
}
  

Ответ №1:

Я понятия не имею, что это xenforo . Но в вашем сообщении об ошибке четко говорится:

Произошло исключение: [Ошибка типа] Аргумент 1, переданный Pages Providers::getData(), должен быть экземпляром XF Pub Controller AbstractController, строка, указанная в src/addons/Pages/Providers.php в строке 23

И в вашей строке кода 23, я думаю, это:

 $reply->setParam('providers', $viewParams);
  

Итак, просто передайте первый параметр, а не строку, а экземпляр, который у вас есть:

 $reply->setParam($controller, $viewParams);