💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 响应 ### 基本回应 几乎可以使用该页面使用的PHP方法返回响应。这包括[布局执行生命周期](https://octobercms.com/docs/cms/layouts#layout-life-cycle)和[AJAX处理程序定义中](https://octobercms.com/docs/ajax/handlers)包含的所有CMS方法。 #### 从CMS方法返回字符串 从CMS页面,布局或组件方法返回字符串将此时停止该过程并覆盖默认行为,因此此处将显示“ Hello World”字符串而不是显示页面。 ~~~ public function onStart() { return 'Hello World'; } ~~~ #### 从AJAX处理程序返回字符串 从AJAX处理程序返回字符串将使用默认键将该字符串添加到响应集合中`result`。要求的部分内容仍将包含在响应中。 ~~~ public function onDoSomething() { return 'Hello World'; // ['result' => 'Hello World'] } ~~~ #### 从路线返回字符串 从[路由定义](https://octobercms.com/docs/services/router)返回字符串将与CMS方法相同,并显示该字符串作为响应。 ~~~ Route::get('/', function() { return 'Hello World'; }); ~~~ #### 创建自定义响应 对于更健壮的解决方案,返回一个`Response`对象,该对象提供了多种构建HTTP响应的方法。我们将在本文中进一步探讨该主题。 ~~~ $contents = 'Page not found'; $statusCode = 404; return Response::make($contents, $statusCode); ~~~ ### [](https://octobercms.com/docs/services/response-view#attaching-headers-to-responses)将标题附加到响应 请记住,大多数响应方法都是可链接的,可以流畅地构建响应。例如,您可以使用该`header`方法向响应添加一系列标头,然后再将其发送回用户: ~~~ return Response::make($content) ->header('Content-Type', $type) ->header('X-Header-One', 'Header Value') ->header('X-Header-Two', 'Header Value'); ~~~ 一个实际的例子可能是返回XML响应: ~~~ return Response::make($xmlString)->header('Content-Type', 'text/xml'); ~~~ ### [](https://octobercms.com/docs/services/response-view#attaching-cookies-to-responses)在响应中附加Cookie 该`withCookie`方法使您可以轻松地将Cookie附加到响应中。例如,您可以使用withCookie方法来生成cookie并将其附加到响应实例: ~~~ return Response::make($content)->withCookie('name', 'value'); ~~~ 该`withCookie`方法接受其他可选参数,这些参数使您可以进一步自定义cookie的属性: ~~~ ->withCookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly) ~~~ ### [](https://octobercms.com/docs/services/response-view#other-response-types)其他回应类型 的`Response`立面可被用来方便地生成其它类型的反应的实例。 ### [](https://octobercms.com/docs/services/response-view#view-responses)查看回应 如果需要访问`Response`类方法,但想返回[视图](https://octobercms.com/docs/services/response-view#views)作为响应内容,则可以使用该`Response::view`方法以方便使用: ~~~ return Response::view('acme.blog::hello')->header('Content-Type', $type); ~~~ ### [](https://octobercms.com/docs/services/response-view#json-responses)JSON回应 该`json`方法将自动将`Content-Type`标头设置为application / json,并使用`json_encode`PHP函数将给定数组转换为JSON: ~~~ return Response::json(['name' => 'Steve', 'state' => 'CA']); ~~~ 如果您想创建JSONP响应,则`json`除了可以使用方法之外`setCallback`: ~~~ return Response::json(['name' => 'Steve', 'state' => 'CA']) ->setCallback(Input::get('callback')); ~~~ ### [](https://octobercms.com/docs/services/response-view#file-downloads)档案下载 该`download`方法可用于生成响应,该响应强制用户的浏览器在给定路径下下载文件。该`download`方法接受文件名作为该方法的第二个参数,它将确定下载文件的用户看到的文件名。最后,您可以将HTTP标头数组作为该方法的第三个参数传递: ~~~ return Response::download($pathToFile); return Response::download($pathToFile, $name, $headers); return Response::download($pathToFile)->deleteFileAfterSend(true); ~~~ > **注意:**管理文件下载的Symfony HttpFoundation要求下载的文件具有ASCII文件名。 ### [](https://octobercms.com/docs/services/response-view#redirects)重新导向 重定向响应通常是`Illuminate\Http\RedirectResponse`该类的实例,并且包含将用户重定向到另一个URL所需的适当标头。生成`RedirectResponse`实例的最简单方法是`to`在`Redirect`外观上使用该方法。 ~~~ return Redirect::to('user/login'); ~~~ ### [](https://octobercms.com/docs/services/response-view#redirect-flash-data)返回带有Flash数据的重定向 重定向到新的URL并将[数据刷新到会话](https://octobercms.com/docs/services/session)通常是在同一时间完成的。因此,为方便起见,您可以`RedirectResponse`在单个方法链中创建实例并将数据闪存到会话: ~~~ return Redirect::to('user/login')->with('message', 'Login Failed'); ~~~ > **注意:**由于该`with`方法会将数据闪烁到会话,因此您可以使用典型`Session::get`方法来检索数据。 #### [](https://octobercms.com/docs/services/response-view#redirecting-previous-url)重定向到上一个URL 您可能希望将用户重定向到他们以前的位置,例如,在提交表单之后。您可以使用以下`back`方法进行操作: ~~~ return Redirect::back(); return Redirect::back()->withInput(); ~~~ #### [](https://octobercms.com/docs/services/response-view#redirecting-current-page)重定向到当前页面 有时您只想刷新当前页面,可以使用以下`refresh`方法: ~~~ return Redirect::refresh(); ~~~ ### [](https://octobercms.com/docs/services/response-view#response-macros)响应宏 如果要定义可在各种路由和控制器中重复使用的自定义响应,则可以使用以下`Response::macro`方法: ~~~ Response::macro('caps', function($value) { return Response::make(strtoupper($value)); }); ~~~ 该`macro`函数接受名称作为其第一个参数,并接受Closure作为其第二个参数。在`Response`类上调用宏名称时,将执行宏的闭包: ~~~ return Response::caps('foo'); ~~~ 您可以在[插件注册文件](https://octobercms.com/docs/plugin/registration#registration-methods)的`boot`方法中定义宏。另外,插件可以在插件目录中提供一个名为**init.php**的文件,您可以用来放置宏注册。