Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 与XF\Pub\Controller\AbstractController相关的TypeError_Php_Typeerror_Xenforo - Fatal编程技术网

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

Php 与XF\Pub\Controller\AbstractController相关的TypeError,php,typeerror,xenforo,Php,Typeerror,Xenforo,免责声明:我是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\Provider

免责声明:我是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回调调用它。回调的标准是使用xf所述的控制器和应答引用:

  • \XF\Pub\Controller\AbstractController$Controller
    控制器 例如。从这里,您可以检查请求、响应等
  • \XF\Mvc\Reply\AbstractReply&$Reply
    页面中的标准回复 控制器
  • 包含在页面节点中的回调是
    Pages\Providers::getData()
    。但是运行so会导致输入错误。据我所知,它是在对我大喊大叫,
    $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);
            }
        }
    }
    

    我不知道什么是
    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);