cookie

  1. // 第一种设置方式
  2. return response('设置成功')‐>cookie('key', 'value', 60);
  3. // 第二种设置方式 使用门面
  4. use Illuminate\Support\Facades\Cookie;
  5. $cookie = Cookie::make("key", "value", 60);
  6. // 同样需要通过响应来设置
  7. return response('设置成功')‐>cookie($cookie);
// 1.通过调用 Illuminate\Http\Request 实例对象的 cookie 方法获取
$value = $request‐>cookie('key');
$value = request()‐>cookie('key');
// 2.通过 Cookie Facade 方式
use Illuminate\Support\Facades\Cookie;
$value = Cookie::get('key')
use Illuminate\Support\Facades\Cookie;
// 使用门面模式删除
Cookie::forget('key');
//在响应中删除
return response('删除cookie')‐>cookie($cookie);
//在 /app/Http/Middleware/EncryptCookies.php 中的 $except 数组中将其加入
protected $except = [ 'key' // cookie 名称 ];

session

配置

config/session.php

  • file ‐ 将 Session 存储在 storage/framework/sessions 中。
  • cookie ‐ Sessions 被存储在安全加密的 cookie 中。
  • database ‐ Sessions 被存储在关系型数据库中。
  • memcached / redis ‐ Sessions 被存储在基于高速缓存的存储系统中。
  • array ‐ Sessions 存储在 PHP 数组中,但不会被持久化

    驱动

    数据库

    使用 database 作为 Session 驱动时,你需要创建一张包含 Session 各项数据的表。以下是使用 Schema建表的例子:
    Schema::create(
    'sessions', function ($table) {
      $table‐>string('id')‐>unique();
      $table‐>unsignedInteger('user_id')‐>nullable();
      $table‐>string('ip_address', 45)‐>nullable();
      $table‐>text('user_agent')‐>nullable();
      $table‐>text('payload');
      $table‐>integer('last_activity');
    }
    );
    

    redis

    Laravel 在使用 Redis 作为 Session 驱动之前,需要通过 Composer 安装 predis/predis 扩展包 (~1.0)。然后在 database 配置文件中配置 Redis 连接信息。在 session 配置文件中,connection 选项可用于指定 Session 使用哪个 Redis 连接。

    session使用

    ```php Route::get(‘home’, function () { // 获取 session 中的一条数据… $value = session(‘key’); // 指定一个默认值… $value = session(‘key’, ‘default’); // 在 Session 中存储一条数据… session([‘key’ => ‘value’]); }); // 获取所有的 session 数据 $data = $request‐>session()‐>all();

if ($request‐>session()‐>has(‘users’)) { // } // 要确定 Session 中是否存在某个值,即使其值为 null,也可以使用 exists 方法。如果值存在,则 exists 方法 返回 true: if ($request‐>session()‐>exists(‘users’)) { // }

```php
// 通过请求实例...
$request‐>session()‐>put('key', 'value');
// 通过全局辅助函数...
session(['key' => 'value']);
$value = $request‐>session()‐>pull('key', 'default');
//这个方法保存在 Session 中的数据,只会保留到下一个 HTTP 请求到来之前,然后就会被删除
$request‐>session()‐>flash('status', 'Task was successful!');

如果你使用了内置函数 LoginController ,Laravel 会自动重新生成身份认证中的 Session ID。否则,你需要手动使用 regenerate 方法重新生成 Session ID。

$request‐>session()‐>regenerate();

验证器

验证器使用

/*** 获取适用于请求的验证规则。 ** @return array */
public function rules() {
  return [ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ];
}

/*** 存储传入的博客文章。 ** @param StoreBlogPost $request * @return Response */
public function store(StoreBlogPost $request) {
  // 传入的请求通过验证...
  // 获取通过验证的数据...
  $validated = $request‐>validated();
}

如果验证失败,就会生成一个让用户返回到先前的位置的重定向响应。这些错误也会被闪存到 session 中,以便这些错误都可以在页面中显示出来。如果传入的请求是 AJAX,会向用户返回具有 422 状态代码和验证错误信息的JSON 数据的 HTTP 响应

/*** 获取已定义验证规则的错误消息。 ** @return array */
public function messages() {
  return [
    'title.required' => 'A title is required',
    'body.required' => 'A message is required',
  ];
}

传给 make 方法的第一个参数是需要验证的数据。第二个参数则是该数据的验证规则。如果验证失败,则可以使用 withErrors 方法把错误消息闪存到 Session 。使用这个方法进行重定向后,$errors 变量会自动和视图共享,你可以把这些消息显示给用户。 withErrors 方法接收验证器、 MessageBag 或 PHP Array 。

<?php
  namespace App\Http\Controllers;
  use Illuminate\Http\Request;
  use App\Http\Controllers\Controller;
  use Illuminate\Support\Facades\Validator;
  class PostController extends Controller {
    /*** 保存一篇新的博客文章。 ** @param Request $request * @return Response */
    public function store(Request $request) {
      $validator = Validator::make($request‐>all(), [
        'title' => 'required|unique:posts|max:255',
        'body' => 'required', ]);
      if ($validator‐>fails()) {
        return redirect('post/create') ‐>withErrors($validator) ‐>withInput();
      }
      // 保存博客文章…
    }
  }

验证器还允许你添加在验证成功之后允许的回调函数,以便你进行下一步的验证,甚至在消息集合中添加更多的错误消息。使用它只需在验证实例上使用 after 方法:

$validator = Validator::make(...);
$validator‐>after(function ($validator) {
  if ($this‐>somethingElseIsInvalid()) {
    $validator‐>errors()‐>add('field', 'Something is wrong with this field!');
  }
});
if ($validator‐>fails()) {
  //
}

验证规则

  • accepted:验证字段必须是 yes, on, 1,或 true。这在确认「服务条款」是否同意时相当有用。
  • active_url:根据 PHP 函数 dns_get_record ,验证字段必须具有有效的 A 或 AAAA 记录。
  • after:date :验证字段必须是给定日期之后的值。日期值将传递到 PHP 函数 strtotime :

    'start_date' => 'required|date|after:tomorrow'
    'finish_date' => 'required|date|after:start_date
    
  • alpha:验证字段必须完全由字母构成。

  • array:验证的字段必须是一个 PHP 数组。 ```php // email 字段只有在 $data 数组中存在时才会被验证 $v = Validator::make($data, [ ‘email’ => ‘sometimes|required|email’, ]);
```php
$validator = Validator::make($request‐>all(), [
  'photos.profile' => 'required|image',
]);
//验证数组中的每个元素
$validator = Validator::make($request‐>all(), [
  'person.*.email' => 'email|unique:users',
  'person.*.first_name' => 'required_with:person.*.last_name',
]);
//为基于数组的字段使用单个验证消息
$validator = Validator::make($request‐>all(), [
  'custom' => [
    'person.*.email' => [
      'unique' => 'Each person must have a unique e‐mail     address',
    ]
  ],
]);
<?php
  namespace App\Rules;
  use Illuminate\Contracts\Validation\Rule;
  class Uppercase implements Rule {
    /*
    ** 确定验证规则是否通过。
    ** @param string $attribute
    * @param mixed $value
    * @return bool
    */
    public function passes($attribute, $value) {
      return strtoupper($value) === $value;
    }
    /*
    ** 获取验证错误消息。
    ** @return string
    */
    public function message() {
      return 'The :attribute must be uppercase.';
    }
  }

错误与日志

错误配置

你的 config/app.php 配置文件中的 debug 选项决定了对于一个错误实际上将显示多少信息给用户。默认情况下,该选项的设置将遵照存储在 .env 文件中的 APP_DEBUG 环境变量的值。
对于本地开发,你应该将 APP_DEBUG 环境变量的值设置为 true 。在生产环境中,该值应始终为 false 。如果在生产中将该值设置为 true ,则可能会将敏感配置值暴露给应用程序的终端用户。

abort(404);
//添加响应文本
abort(403, 'Unauthorized action.');

Laravel 可以轻松显示各种 HTTP 状态代码的自定义错误页面。例如,如果你希望自定义 404 HTTP 状态码的错误页面,可以创建一个 resources/views/errors/404.blade.php 视图文件。该文件将被用于你的应用程序产生的所有 404 错误。此目录中的视图文件的命名应匹配它们对应的 HTTP 状态码。由 abort 函数引发的 HttpException 实例将作为 $exception 变量传递给视图:

php artisan vendor:publish ‐‐tag=laravel‐errors

日志配置

所有的应用程序日志系统配置都位于 config/logging.php 配置文件中。这个文件允许你配置你的应用程序日志通道,所以务必查看每个可用的通道及它们的选项。
默认情况下,Monolog 使用与当前环境匹配的『通道名称』进行实例化,比如 production 或者 local 。要改变这个值,需添加一个 name 选项到你的通道配置中:

'stack' => [
  'driver' => 'stack',
  'name' => 'channel‐name',
  'channels' => ['single', 'slack'],
],

可用的通道驱动:

  • stack: 一个便于创建『多通道』通道的包装器
  • single: 单个文件或者基于日志通道的路径 (StreamHandler)
  • daily: 一个每天轮换的基于 Monolog 驱动的 RotatingFileHandler
  • slack: 一个基于 Monolog 驱动的 SlackWebhookHandler
  • papertrail: 一个基于 Monolog 驱动的 SyslogUdpHandler
  • syslog: 一个基于 Monolog 驱动的 SyslogHandler
  • errorlog: 一个基于 Monolog 驱动的 ErrorLogHandler
  • monolog: 一个可以使用任何支持 Monolog 处理程序的 Monolog 工厂驱动程序
  • custom: 一个调用指定工厂创建通道的驱动程序

    日志级别

    Monolog (一个功能强劲的 Laravel 日志服务)接受定义在 RFC 5424 specification 中的全部级别: emergencyalertcriticalerrorwarningnoticeinfo debug。
    Log::emergency($message); //紧急
    Log::alert($message); //警报
    Log::critical($message);//紧急
    Log::error($message);//错误
    Log::warning($message);//警告
    Log::notice($message);//通知
    Log::info($message);//信息
    Log::debug($message);//调试
    //写入指定通道
    Log::channel('slack')‐>info('Something happened!');
    //创建一个由多通道构成的按需记录的堆栈
    Log::stack(['single', 'slack'])‐>info('Something happened!');
    
    默认情况下,消息被写入到在config/logging.php 配置文件中定义的默认日志通道。