请求和输入

基本输入

您可以使用一些简单的方法访问所有用户输入。 使用Inputfacade时,您无需担心请求的HTTP谓词,因为所有谓词都以相同的方式访问输入。 全局input helper functionInput::get的别名。

检索输入值

  1. $name = Input::get('name');

如果输入值不存在,则检索默认值

  1. $name = Input::get('name', 'Sally');

确定是否存在输入值

  1. if (Input::has('name')) {
  2. //
  3. }

获取请求的所有输入

  1. $input = Input::all();

仅获取一些请求输入

  1. $input = Input::only('username', 'password');
  2. $input = Input::except('credit_card');

处理带有“数组”输入的表单时,可以使用点表示法来访问数组:

  1. $input = Input::get('products.0.name');

注意: 一些JavaScript库(如Backbone)可以将输入作为JSON发送到应用程序。 您可以通过Input::get访问此数据,就像正常一样。

Cookies

默认情况下,October创建的所有Cookie都会加密并使用身份验证代码进行签名,这意味着如果客户端更改了这些Cookie,则会将其视为无效。 在cookie.unencryptedCookies配置密钥中命名的cookie将不会被加密。

注意: Cookie使用APP_KEY加密,因此如果客户知道APP_KEY,则可能会由客户制作Cookie。 如果您的应用程序的加密密钥掌握在恶意方的手中,则该方可以使用加密密钥创建cookie值,并利用继承到PHP对象序列化/反序列化的漏洞,例如在应用程序中调用任意类方法。 为了缓解这种情况,如果您怀疑它已被泄露,请务必轮换您的APP_KEY,并确保始终确认您从cookie中收到的数据是在您使用它之前所预期的。

检索cookie值

  1. $value = Cookie::get('name');

将新cookie附加到响应

  1. $response = Response::make('Hello World');
  2. $response->withCookie(Cookie::make('name', 'value', $minutes));

为下一个响应排队cookie

如果您想在创建响应之前设置cookie,请使用Cookie::queue方法。 cookie将自动附加到您的应用程序的最终响应中。

  1. Cookie::queue($name, $value, $minutes);

创建一个永远持续的cookie

  1. $cookie = Cookie::forever('name', 'value');

处理没有加密的cookie

如果您不希望某些cookie被加密或解密,您可以在配置中指定它们。 例如,当您想要通过cookie将数据从前端传递到服务器端后端时,这很有用,反之亦然。

将不应加密或解密的cookie的名称添加到config/cookie.php配置文件中的unencryptedCookies参数。

  1. /*
  2. |--------------------------------------------------------------------------
  3. | 没有加密的Cookies
  4. |--------------------------------------------------------------------------
  5. |
  6. | OctoberCMS默认加密/解密cookie。 您可以指定cookie
  7. | 这里不应该加密或解密。 这很有用
  8. | 例如,当您想要将数据从前端传递到服务器端后端时
  9. | 通过cookie,反之亦然。
  10. |
  11. */
  12. 'unencryptedCookies' => [
  13. 'my_cookie',
  14. ],

或者对于插件,您也可以从插件的Plugin.php动态添加这些插件。

  1. public function boot()
  2. {
  3. Config::push('cookie.unencryptedCookies', "my_cookie");
  4. }

老得input数据

您可能需要保留一个请求的输入,直到下一个请求。 例如,在检查表单是否存在验证错误后,您可能需要重新填充表单。

flash 输入到会话

  1. Input::flash();

仅flash会话的一些输入

  1. Input::flashOnly('username', 'email');
  2. Input::flashExcept('password');

由于您经常需要将flash输入与重定向到上一页相关联,因此您可以轻松地将输入闪烁链接到重定向。

  1. return Redirect::to('form')->withInput();
  2. return Redirect::to('form')->withInput(Input::except('password'));

注意: 您可以使用Session类在请求之间刷新其他数据。

检索旧数据

  1. Input::old('username');

文件

检索上传的文件

  1. $file = Input::file('photo');

确定文件是否已上传

  1. if (Input::hasFile('photo')) {
  2. //
  3. }

file方法返回的对象是Symfony\Component\HttpFoundation\File\UploadedFile类的一个实例,它扩展了PHPSplFileInfo类,并提供了各种与文件交互的方法。

确定上传的文件是否有效

  1. if (Input::file('photo')->isValid()) {
  2. //
  3. }

移动上传的文件

  1. Input::file('photo')->move($destinationPath);
  2. Input::file('photo')->move($destinationPath, $fileName);

检索上传文件的路径

  1. $path = Input::file('photo')->getRealPath();

检索上传文件的原始名称

  1. $name = Input::file('photo')->getClientOriginalName();

检索上传文件的扩展名

  1. $extension = Input::file('photo')->getClientOriginalExtension();

检索上传文件的大小

  1. $size = Input::file('photo')->getSize();

检索上传文件的MIME类型

  1. $mime = Input::file('photo')->getMimeType();

请求信息

Request类提供了许多方法来检查应用程序的HTTP请求,并扩展了Symfony\Component\HttpFoundation\Request类。 这儿是一些精彩片段。

检索请求URI

  1. $uri = Request::path();

检索请求方法

  1. $method = Request::method();
  2. if (Request::isMethod('post')) {
  3. //
  4. }

确定请求路径是否与模式匹配

  1. if (Request::is('admin/*')) {
  2. //
  3. }

获取请求URL

  1. $url = Request::url();

检索请求URI段

  1. $segment = Request::segment(1);

检索请求标头

  1. $value = Request::header('Content-Type');

从$_SERVER中检索值

  1. $value = Request::server('PATH_INFO');

确定请求是否通过HTTPS

  1. if (Request::secure()) {
  2. //
  3. }

确定请求是否使用AJAX

  1. if (Request::ajax()) {
  2. //
  3. }

确定请求是否具有JSON内容类型

  1. if (Request::isJson()) {
  2. //
  3. }

确定请求是否要求JSON

  1. if (Request::wantsJson()) {
  2. //
  3. }

检查请求的响应格式

Request::format方法将根据HTTP Accept标头返回请求的响应格式:

  1. if (Request::format() == 'json') {
  2. //
  3. }