将 SimpleXMLElement 参数保存到全局变量

我目前正在使用 Botman 框架让我的机器人读取 XML 文件。


目前,我的机器人能够从 XML 文件中获取数据并将其输出。


我在将 XML 文件保存回全局变量时遇到问题(以便稍后可以在代码中重用)。这是我尝试执行此操作时收到的当前错误消息:


"message": "Serialization of 'SimpleXMLElement' is not allowed",

"exception": "Exception",

"file": "C:\\Users\\Jack\\finalyearproject\\gfyp\\gfyp\\vendor\\opis\\closure\\src\\SerializableClosure.php    

我这里遇到问题:


public function nodeTest($xmlFile, $answer)

{

    $this->XMLFile = $xmlFile;

    ...

}

这是函数之前的类代码:


class StartConversation extends Conversation

{

    public $XMLFile;


    ...


    public function askForDatabase()

    {

        $question = Question::create('Test test test?')

            ->fallback('Unable to create a new database')

            ->callbackId('create_database')

            ->addButtons([

                Button::create('Suicide')->value('suic'),

                Button::create('Self-harm')->value('sh'),

            ]);


        $this->ask($question, function (Answer $answer) {


            $xmlResult = $this->testXMLGrabFunction($answer);


            if ($answer->getValue() == 'suic') {

                $this->nodeTest($xmlResult, $answer);

            }

            if ($answer->getValue() == 'sh') {

                $this->nodeTest($xmlResult, $answer);

            }

        });

    }

}

这是我最初获取 XML 文件的类:


class testClass

{


    function getXMLCategory($categoryName)

    {

        $xml = simplexml_load_file('ST-working-age-23-3-20.xml');


        if($categoryName == 'suic')

        {

            $xml = $xml->node[0];

            return $xml;

        } elseif($categoryName == 'sh') {

            $xml = $xml->node[1];

            return $xml;

        } else {

            return null;

        }


    }


}

任何建议都会很棒 - 谢谢


拉丁的传说
浏览 135回答 1
1回答

www说

错误消息告诉您代码中的某处正在尝试序列化对象,即将其转换为字符串表示形式。这可能在您正在使用的框架中,并且您所认为的“全局变量”实际上是以某种形式的会话存储在请求之间,例如在磁盘上的文件中。由于 SimpleXML 的实现方式,它不允许执行此操作。最简单的解决方法是通过调用 来存储 XML ->asXML(),然后在需要时使用 重新解析它simplexml_load_string()。您将希望尽可能少地进行往返,因此值得更好地了解框架实际上如何处理“全局变量”,以便您可以尝试对每个请求执行一次。
打开App,查看更多内容
随时随地看视频慕课网APP