意见与回应
基本反应
几乎可以从页面使用的 PHP 方法返回响应。这包括包含在布局执行生命周期 和AJAX 处理程序定义.
从 CMS 方法返回字符串
从 CMS 页面、布局或组件方法返回字符串将在此时停止进程并覆盖默认行为,因此此处将显示“Hello World”字符串而不是显示页面。
public function onStart()
{
return 'Hello World';
}
从 AJAX 处理程序返回字符串
从 AJAX 处理程序返回一个字符串将使用默认键将该字符串添加到响应集合中result
.请求的部分仍将包含在响应中。
public function onDoSomething()
{
return 'Hello World';
// ['result' => 'Hello World']
}
从路由返回字符串
从 a 返回一个字符串路线定义 将与 CMS 方法一样,并将字符串显示为响应。
Route::get('/', function() {
return 'Hello World';
});
创建自定义响应
对于更强大的解决方案,返回一个Response
对象提供多种构建 HTTP 响应的方法。我们将在本文中进一步探讨这个话题。
$contents = 'Page not found';
$statusCode = 404;
return Response::make($contents, $statusCode);
将标头附加到响应
请记住,大多数响应方法都是可链接的,从而可以流畅地构建响应。例如,您可以使用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');
将 cookie 附加到响应
这withCookie
方法允许您轻松地将 cookie 附加到响应中。例如,您可以使用 withCookie 方法生成一个 cookie 并将其附加到响应实例:
return Response::make($content)->withCookie('name', 'value');
这withCookie
方法接受额外的可选参数,允许您进一步自定义 cookie 的属性:
->withCookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)
其他响应类型
这Response
facade 可用于方便地生成其他类型的响应实例。
查看回复
如果您需要访问Response
类方法,但想返回一个view 作为响应内容,您可以使用Response::view
方便的方法:
return Response::view('acme.blog::hello')->header('Content-Type', $type);
JSON 响应
这json
方法将自动设置Content-Type
header 到 application/json,以及使用json_encode
PHP函数:
return Response::json(['name' => 'Steve', 'state' => 'CA']);
如果你想创建一个 JSONP 响应,你可以使用json
方法除了setCallback
:
return Response::json(['name' => 'Steve', 'state' => 'CA'])
->setCallback(Input::get('callback'));
文件下载
这download
方法可用于生成一个响应,强制用户的浏览器在给定路径下载文件。这download
方法接受一个文件名作为该方法的第二个参数,它将确定用户下载文件时看到的文件名。最后,您可以将 HTTP 标头数组作为第三个参数传递给该方法:
return Response::download($pathToFile);
return Response::download($pathToFile, $name, $headers);
return Response::download($pathToFile)->deleteFileAfterSend(true);
NOTE: 管理文件下载的 Symfony HttpFoundation 要求下载的文件具有 ASCII 文件名。
Redirects
重定向响应通常是Illuminate\Http\RedirectResponse
类,并包含将用户重定向到另一个 URL 所需的正确标头。最简单的生成方法RedirectResponse
实例是使用to
上的方法Redirect
正面。
return Redirect::to('user/login');
返回带有闪存数据的重定向
重定向到一个新的 URL 和将数据闪烁到会话 通常同时进行。因此,为了方便起见,您可以创建一个RedirectResponse
在单个方法链中将实例和闪存数据发送到会话:
return Redirect::to('user/login')->with('message', 'Login Failed');
NOTE: 自从
with
方法将数据闪存到会话中,您可以使用典型的方法检索数据Session::get
方法。
重定向到上一个 URL
您可能希望将用户重定向到他们之前的位置,例如,在提交表单之后。您可以使用back
方法:
return Redirect::back();
return Redirect::back()->withInput();
重定向到当前页面
有时你想简单地刷新当前页面,你可以使用refresh
方法:
return Redirect::refresh();
响应宏
如果您想定义一个可以在各种路由和控制器中重复使用的自定义响应,您可以使用Response::macro
方法:
Response::macro('caps', function($value) {
return Response::make(strtoupper($value));
});
这macro
函数接受一个名字作为它的第一个参数,一个闭包作为它的第二个参数。宏的闭包会在调用宏名时执行Response
班级:
return Response::caps('foo');
您可以在boot
一个方法插件注册文件.或者,插件可以提供一个名为init.php 在可用于放置宏注册的插件目录中。
Views
视图是存储基于系统的表示逻辑的好方法,例如 API 或端点使用的标记,或与 CMS 和后端区域共享的标记。视图也被使用邮件服务 用于提供默认模板内容。视图通常存储在views
一个插件的目录。
一个简单的视图可能看起来像这样:
<!-- View stored in plugins/acme/blog/views/greeting.htm -->
<html>
<body>
<h1>Hello, {{ name }}</h1>
</body>
</html>
还可以使用 PHP 模板解析视图,方法是使用.php
扩大:
<!-- View stored in plugins/acme/blog/views/greeting.php -->
<html>
<body>
<h1>Hello, <?php echo $name; ?></h1>
</body>
</html>
这个视图可以返回给浏览器使用View::make
方法:
return View::make('acme.blog::greeting', ['name' => 'Charlie']);
第一个参数是包含插件名称的“路径提示”,由两个冒号分隔::
, 后跟视图文件名。第二个参数传递给View::make
是应该对视图可用的数据数组。
NOTE: 路径提示区分大小写,插件名称应始终为小写。
将数据传递给视图
// Using conventional approach
$view = View::make('acme.blog::greeting')->with('name', 'Steve');
// Using magic methods
$view = View::make('acme.blog::greeting')->withName('steve');
在上面的例子中变量name
可以从视图访问,并且将包含Steve
.如上所述,如果你想传递一个数据数组,你可以将其作为传递给make
方法:
$view = View::make('acme.blog::greeting', $data);
也可以在所有视图之间共享一条数据:
View::share('name', 'Steve');
将子视图传递给视图
有时您可能希望将一个视图传递给另一个视图。例如,给定一个子视图存储在plugins/acme/blog/views/child/view.php
,我们可以像这样将它传递给另一个视图:
$view = View::make('acme.blog::greeting')->nest('child', 'acme.blog::child.view');
$view = View::make('acme.blog::greeting')->nest('child', 'acme.blog::child.view', $data);
然后可以从父视图呈现子视图:
<html>
<body>
<h1>Hello!</h1>
{{ child | raw }}
</body>
</html>
判断视图是否存在
如果您需要检查视图是否存在,请使用View::exists
方法:
if (View::exists('acme.blog::mail.customer')) {
//
}