Ошибка типа, связанная с XF \ Pub \ Controller \ AbstractController - PullRequest
0 голосов
/ 25 апреля 2019

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

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

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

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

  1. \XF\Pub\Controller\AbstractController $controller Контроллер пример. Из этого вы можете проверить запрос, ответ и т. Д.
  2. \XF\Mvc\Reply\AbstractReply &$reply Стандартный ответ со страницы контроллер.

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

<?php

namespace Pages;

class Providers
{
    /**
     * @param \XF\Pub\Controller\AbstractController $controller
     * @param \XF\Mvc\Reply\AbstractReply           &$reply
     */
    public static function getData(
        \XF\Pub\Controller\AbstractController $controller,
        \XF\Mvc\Reply\AbstractReply &$reply
    ) {
        if ($reply instanceof \XF\Mvc\Reply\View) {
                $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 Ответ

1 голос
/ 25 апреля 2019

Понятия не имею, что такое xenforo.Но в вашем сообщении об ошибке четко сказано:

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

А в строке 23 кода я думаю, что это:

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

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

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