输入(Input)和Cookies

目录

输入(Input)

Input类用来处理通过 GET, POST, PUT, 和 DELETE方式请求的输入请求. 下面是一些通过Input类访问输入数据的方法:

从输入数组中获得值:

$email = Input::get('email');

提示: "get"方法可以匹配所有的类型的请求(GET, POST, PUT, 和 DELETE), 不只是GET请求!

从输入数组中获得所有文本请求:

$input = Input::get();

从输入数组中获得所有请求也包括$_FILES数组:

$input = Input::all();

默认的, 如果不存在请求数据null值将会被返回. 但是, 你可以通过传入第二个参数来设置默认返回值:

如果不存在请求数据则返回默认值:

$name = Input::get('name', 'Fred');

通过闭包的方式返回默认值:

$name = Input::get('name', function() {return 'Fred';});

判断是否这次请求包含数据:

if (Input::has('name')) ...

提示: 如果请求的数据是空字符串"has"方法也会返回false.

JSON输入

当使用了JavaScript的MVC框架如:Backbone.js, 你也许会通过程序获得JSON提交的数据请求. 所以为了简便起见我们封装了Input::json方法.

获得JSON数据请求:

$data = Input::json();

文件

获得$_FILES数组的所有数据:

$files = Input::file();

获得$_FILES数组的其中一项:

$picture = Input::file('picture');

获得$_FILES数组的其中一项的特定属性(和$_FILE['picture']['size']一样):

$size = Input::file('picture.size');

上一次输入

当无效表单提交后你通常需要重新填充表单内容.Laravel的Input类自设计之时就考虑了这个问你. 下面是一个例子, 可以轻松地检索以前的请求.首先, 你要把输入数据通过"flash"方法写入session中:

把输入数据一次性写入session中:

Input::flash();

把选定的数据一次性写入session中:

Input::flash('only', array('username', 'email'));

Input::flash('except', array('password', 'credit_card'));

检索被写入的上次请求的一次性数据:

$name = Input::old('name');

提示: 在使用"old"方法前你必须指定一个可用的Session驱动.

更多相关:

带着上一次输入跳转

现在你已经了解了如何把输入数据一次性写入到session中.

在使用重定向时这里有一个快捷方式捎带着前一次输入, 防止你从一条一条的注入(微观管理上)上一次输入的内容:

跳转时执行一次性写入:

return Redirect::to('login')->with_input();

跳转时执行一次性写入特定的字段:

return Redirect::to('login')->with_input('only', array('username'));

return Redirect::to('login')->with_input('except', array('password'));

Cookies

Laravel提供了一个优美的封装$_COOKIE数组的方式, 在使用之前你先要明确下面几点. 所有的Laravel的Cookie都含有一个"签名哈希算法(signature hash)".这允许的框架验证确保Cookie尚未在客户端被修改. 其次, 在设置cookie时, cookie不能立即发送到浏览器, 而是汇集在一起直到请求结束一起发送到客户端. 这意味着, 在同一个请求中你将不能够同时设置和检索一个cookie值(因为你设置的Cookie直到请求结束才写入生效).

检索一个cookie值:

$name = Cookie::get('name');

如果cookie值不存在则返回默认值:

$name = Cookie::get('name', 'Fred');

设置一个持续60分钟的cookie:

Cookie::put('name', 'Fred', 60);

设置一个可以持续5年的"永久(permanent)"cookie:

Cookie::forever('name', 'Fred');

删除一个cookie:

Cookie::forget('name');

合并和替换

有些时候你可能想合并和替换输入的内容,下面是方法:

把新数据替换/合并到当前输入中:

Input::merge(array('name' => 'Spock'));

把新数组数据替换/合并到当前输入中:

Input::merge(array('doctor' => 'Bones', 'captain' => 'Kirk'));