0

我目前正在使用 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;
        }

    }

}

任何建议都会很棒-谢谢

4

1 回答 1

1

错误消息告诉您代码中的某处正在尝试序列化对象,即将其转换为字符串表示形式。这可能在您正在使用的框架中,并且您认为的“全局变量”实际上以某种形式的会话存储在请求之间,例如在磁盘上的文件中。

由于 SimpleXML 的实现方式,它不允许此操作。最简单的解决方法是通过调用来存储 XML ->asXML(),然后在需要时使用simplexml_load_string().

您将希望尽可能少地进行往返,因此值得更好地了解框架如何实际处理“全局变量”,以便您可以尝试在每个请求上执行一次。

于 2020-07-08T08:19:36.417 回答