控制器动作返回

时间:2016-03-22 02:03:16

标签: php silverstripe

根据Silverstripe Docs

动作方法可以返回以下四个主要内容之一:

  • 一个数组。在这种情况下,数组中的值可以在模板中使用,并且控制器照常完成,返回SS_HTTPResponse,并将body设置为当前模板。
  • HTML。 SilverStripe会将HTML包装到SS_HTTPResponse中,并将状态代码设置为200.
  • 包含手动定义的状态代码和正文的SS_HTTPResponse。
  • SS_HTTPResponse_Exception。一种特殊类型的响应,表示错误。通过返回异常,执行管道可以适应并显示任何错误处理程序。

我的问题在哪里可以找到有关这些的扩展说明?

1 个答案:

答案 0 :(得分:1)

根据你对'权威'的意思,你会感到失望。虽然付出了努力,但通常有很多(特别是API)文档会不时地过时。

你的两个文档来源(不是逐字阅读代码)是:

http://docs.silverstripe.org http://api.silverstripe.org

我认为你会想要后者,在这种情况下你会想要使用Controller::handleRequest的搜索来跟踪我的想法。您正在讨论控制器操作,但对于任何涉及返回的输出,基本上都是如此。

返回:字符串|数组|对象。

字符串基本上是直接输出(但是首先继续通过处理管道,而不是例如。echo 'direct output';。我相信在字符串设置方面有关于字符串的假设(IIRC)它默认是认为它是HTML,或者可能有简单的启发式测试),所以应该在API文档/代码中进行检查。

数组是一个简单的快捷方式,与返回$this->customise($thatSameArray);实际上相同(使用上面的api链接并搜索controller :: customize)

对象 RequestHandler 响应对象(正如您的snippit所说)。如果返回RequestHandler,则执行它(除非它是例如。$ this,并且已经执行)。响应是它在锡上所说的;封装输出的对象,包括响应代码,正文等。

这一切都来自我的头脑,所以应该通过上面的链接检查(这反过来是doxygen风格生成的文档,因此包含在代码中,但是从阅读代码本身开始是一步)。