与 XF\Pub\Controller\AbstractController 相关的 TypeError

Posted

技术标签:

【中文标题】与 XF\\Pub\\Controller\\AbstractController 相关的 TypeError【英文标题】:TypeError related to XF\Pub\Controller\AbstractController与 XF\Pub\Controller\AbstractController 相关的 TypeError 【发布时间】:2019-04-25 02:08:52 【问题描述】:

免责声明:我是 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

我不知道我做错了什么...这是我当前的攻击计划,我有一个非常短的 sn-p 代码(下面包含一个函数),我想在XenForo 页面使用 PHP 回调。回调的标准是使用控制器和 xf 所述的回复引用:

    \XF\Pub\Controller\AbstractController $controller控制器 实例。从中您可以检查请求、响应等。 \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】:

我不知道xenforo 是什么。但是您的错误信息清楚地表明:

发生异常:[TypeError] 参数 1 传递给 Pages\Providers::getData() 必须是 XF\Pub\Controller\AbstractController,给出的字符串 第 23 行的 src/addons/Pages/Providers.php

在你的第 23 行代码中,我认为是这个:

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

所以只需传递第一个参数而不是字符串,而是你拥有的实例:

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

【讨论】:

以上是关于与 XF\Pub\Controller\AbstractController 相关的 TypeError的主要内容,如果未能解决你的问题,请参考以下文章

=与==&与&&| 与 || 的区别

与 0 进行比较与与某个值进行比较是不是更快?

三.工具与市场-债券与债务股票与公司

RESTfulREST 与 RESTful 理解与实践

RESTfulREST 与 RESTful 理解与实践

RESTfulREST 与 RESTful 理解与实践