将 SimpleXMLElement 参数保存到全局变量

Saving SimpleXMLElement parameter to global variable

我目前正在使用 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 代码:

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);
            }
        });
    }
}

这是 class 我最初得到 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;
        }

    }

}

任何建议都很好 - 谢谢

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

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

重新解析它

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