我可以在代码部分声明自定义函数吗?

Can I declare a custom function in code section?

我试图在部分代码的 php 部分声明并调用一个函数,但 october 看不到它。 代码如下所示:

function onStart() {
    return sayHi();
}

function sayHi() {
    return 'Hi';
}

你能告诉我这有什么问题吗? 这里唯一允许的功能是那些与页面生命周期相关的功能吗? (onStart()、onEnd()、onInit()、onRun() 等)

尝试:

function sayHi() {
    return 'Hi';
   }

function onStart() {
    return sayHi();
   }

否则,当执行到达 return sayHi(); 时,它将不知道函数 sayHi()。一些 literature about it...

如果有这样的问题,有时将您收到的实际错误消息包括在内可能会有所帮助,这样人们就不会开始朝错误的方向疯狂猜测。在这种情况下,实际上应该出现一条错误消息,如:

ERROR: Call to undefined function sayHi()

这里出现这个错误的原因是模板代码段中的函数不是在全局范围内定义的,而是作为某个对象的方法定义的。因此,要相互引用,您必须在该部分内的每个交叉函数调用之前加上 $this-> 以指定您正在调用当前对象的方法,而不是全局函数。

将您的 ònStart() 函数更改为

function onStart() {
    return $this->sayHi();
}

应该可以正常工作。

但是,您可能需要考虑使用该 return 语句要实现的目标。十月份的 onStart() 和其他生命周期函数的设计方式,通常不希望出现 return 语句。但如果它存在,页面执行周期将在该点停止并且 return 值将作为响应发送回浏览器。

如果您只想在页面上显示消息 'Hi'(在其他所有内容之前),那么您最好这样做:

function onStart()
{
    $this->sayHi();
}

function sayHi()
{
    echo "<h1>Hi!</h1>";
}

这样页面渲染循环之后还会继续。但这实际上仍然没有好处,因为 "<h1>Hi!</h1>" 现在在 everything else 之前(即在开始 <html> 标签或任何出现在顶部)。

我猜你实际上并不想那样使用它,除了用于功能测试目的,但无论如何,我认为解释一下可能会很好,这样人们就会知道如果他们偶然发现那里实际发生了什么它。 ;)

(在相关说明中,这里有一些关于正确使用 sending a custom response in OctoberCMS 的文档。)


(如果您想为 OctoberCMS 建立专门的 stackechange 社区,请支持 octobercms.stackexchange proposal。我会删除这条烦人的消息,一旦实现该目标 - 承诺: ) )