杂项

设置Cookie

// 引入 Cookie
use Illuminate\Support\Facades\Cookie;

// 写入Cookie
$Cookie = Cookie::make('LoginUser','admin',time());

// 加入队列
Cookie::queue($Cookie);

获取Cookie

Cookie::get('LoginUser');

删除Cooekie

// 把Cookie 的有效期(Expires/Max-Age)设置成过去时即可
$LoginUser = Cookie::forget('LoginUser');

Cookie::queue($LoginUser);
dd(Cookie::has('LoginUser'));

Cookies 和 加密

默认情况下,由 Laravel 生成的所有 cookie 都经过了加密和签名,因此客户端无法篡改或读取它们。如果要对应用程序生成的部分 cookie 禁用加密,可以使用 App\Http\Middleware\EncryptCookies 中间件的 $except 属性,该属性位于 App/Http/Middleware 目录中

/**
 * 这个名字的 Cookie 将不会加密
 *
 * @var array
 */
protected $except = [
    'cookie_name',
];

Session

设置session

// 通过 Request ...
$request->session()->put('key', 'value');

// 通过全局 Session 助手函数 ...
session(['key' => 'value']);

// 一次性session
$request->session()->flash('status', 'Task was successful!');

push 方法可以把一个新值推入到以数组形式存储的 session 值里。例如:如果 user.teams 键值对有一个关于团队名字的数组,你可以推入一个新值到这个数组里:

$request->session()->push('user.teams', 'developers');

获取Session

// 获取所有的session
$data = $request->session()->all();

// 判断session是否存在
$request->session()->has('users');

// 获取单个session
$request->session()->get('key', 'default');

// 视图获取 session
{{ Session::get('user_name') }}

删除Session

// 删除一个单独的键值对 ...
$request->session()->forget('name');

// 删除多个 键值对 ...
$request->session()->forget(['name', 'status']);

$request->session()->flush();

全局助手函数

// 从 Session 获取数据 ...
$value = session('key');

// 设置默认值...
$value = session('key', 'default');

// 在Session 里存储一段数据 ...
session(['key' => 'value']);

分页(自定义分页样式)

操作步骤如下:

(1)  对应public/css/paging.css 文件建立分页样式.
(2)  控制器查出分页数据使用 paginate函数进行分页处理.(禁止使用group by处理查询).
(3)  对应视图引入分页样式.

paging.css

.pagination {
    display: inline-block;
    padding-left: 0;
    margin: 20px 0;
    border-radius: 4px
}

.pagination>li {
    display: inline
}

.pagination>li>a,
.pagination>li>span {
    position: relative;
    float: left;
    padding: 6px 12px;
    margin-left: -1px;
    line-height: 1.42857143;
    color: #337ab7;
    text-decoration: none;
    background-color: #fff;
    border: 1px solid #ddd
}

.pagination>li:first-child>a,
.pagination>li:first-child>span {
    margin-left: 0;
    border-top-left-radius: 4px;
    border-bottom-left-radius: 4px
}

.pagination>li:last-child>a,
.pagination>li:last-child>span {
    border-top-right-radius: 4px;
    border-bottom-right-radius: 4px
}

.pagination>li>a:focus,
.pagination>li>a:hover,
.pagination>li>span:focus,
.pagination>li>span:hover {
    z-index: 2;
    color: #23527c;
    background-color: #eee;
    border-color: #ddd
}

.pagination>.active>a,
.pagination>.active>a:focus,
.pagination>.active>a:hover,
.pagination>.active>span,
.pagination>.active>span:focus,
.pagination>.active>span:hover {
    z-index: 3;
    color: #fff;
    cursor: default;
    background-color: #337ab7;
    border-color: #337ab7
}

.pagination>.disabled>a,
.pagination>.disabled>a:focus,
.pagination>.disabled>a:hover,
.pagination>.disabled>span,
.pagination>.disabled>span:focus,
.pagination>.disabled>span:hover {
    color: #777;
    cursor: not-allowed;
    background-color: #fff;
    border-color: #ddd
}

 /* 更改Layui以及bootstrap分页 水平居中 */
 .layui-laypage,.pagination{
    transform: translateX(-50%);
    margin-left: 50%;
  }

控制器示例写法

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Cookie;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class IndexController extends Controller
{
    public function index(Request $request)
    {

        $test = DB::table('article')->paginate(5);

        return view('index', ['test' => $test]);

    }
}

视图示例写法

<!-- 输出分页 -->
{{$test->links()}}

app\Providers\AppServiceProvider.php

可以在 App\Providers\AppServiceProvider 服务提供者中的 boot 方法内调用分页器的 useBootstrap 方法替代默认的 Tailwind 视图

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Blade;

// 分页类
use Illuminate\Pagination\Paginator;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        // 调用Bootstrap分页结构
        Paginator::useBootstrap();
    }
}

验证码扩展

安装

composer require mews/captcha

修改config/app 文件

// 在这添加 ServiceProvider
'providers' => [
    ...
    Mews\Captcha\CaptchaServiceProvider::class,
],

// 找到 aliases 数组在里面追加如下内容

'aliases' => [
    ...
    'Captcha' => Mews\Captcha\Facades\Captcha::class,
],

运行 php artisan vendor:publish 生成配置文件 config/captcha.php

 Which provider or tag's files would you like to publish?:
  [0] Publish files from all providers and tags listed below
  [1] Provider: Facade\Ignition\IgnitionServiceProvider
  [2] Provider: Fruitcake\Cors\CorsServiceProvider
  [3] Provider: Illuminate\Foundation\Providers\FoundationServiceProvider
  [4] Provider: Illuminate\Mail\MailServiceProvider
  [5] Provider: Illuminate\Notifications\NotificationServiceProvider
  [6] Provider: Illuminate\Pagination\PaginationServiceProvider
  [7] Provider: Intervention\Image\ImageServiceProviderLaravelRecent
  [8] Provider: Laravel\Sail\SailServiceProvider
  [9] Provider: Laravel\Sanctum\SanctumServiceProvider
  [10] Provider: Laravel\Tinker\TinkerServiceProvider
  [11] Provider: Mews\Captcha\CaptchaServiceProvider
  [12] Tag: config
  [13] Tag: cors
  [14] Tag: flare-config
  [15] Tag: ignition-config
  [16] Tag: laravel-errors
  [17] Tag: laravel-mail
  [18] Tag: laravel-notifications
  [19] Tag: laravel-pagination
  [20] Tag: sail
  [21] Tag: sail-bin
  [22] Tag: sail-docker
  [23] Tag: sanctum-config
  [24] Tag: sanctum-migrations
 > 11

运行发布指令后,它提示让我们选择发布哪个,这里选择Provider: Mews\Captcha\CaptchaServiceProvider就可以

config/captcha.php

<?php

return [
    'characters' => ['2', '3', '4', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'm', 'n', 'p', 'q', 'r', 't', 'u', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'M', 'N', 'P', 'Q', 'R', 'T', 'U', 'X', 'Y', 'Z'],
    'default' => [
        'length' => 9,
        'width' => 120,
        'height' => 36,
        'quality' => 90,
        'math' => false,
        'expire' => 60,
        'encrypt' => false,
    ],
    'math' => [
        'length' => 9,
        'width' => 120,
        'height' => 36,
        'quality' => 90,
        'math' => true,
    ],

    'flat' => [
        'length' => 6,
        'width' => 160,
        'height' => 46,
        'quality' => 90,
        'lines' => 6,
        'bgImage' => false,
        'bgColor' => '#ecf2f4',
        'fontColors' => ['#2c3e50', '#c0392b', '#16a085', '#c0392b', '#8e44ad', '#303f9f', '#f57c00', '#795548'],
        'contrast' => -5,
    ],
    'mini' => [
        'length' => 3,
        'width' => 60,
        'height' => 32,
    ],
    'inverse' => [
        'length' => 5,
        'width' => 120,
        'height' => 36,
        'quality' => 90,
        'sensitive' => true,
        'angle' => 12,
        'sharpen' => 10,
        'blur' => 2,
        'invert' => true,
        'contrast' => -5,
    ],
];

使用案例

<div class="form-group code">
    <label>验证码</label>
    <input class="tt-text" name="captcha">
    {!! captcha_img() !!}
</div>


<div class="form-group code">
    <label>验证码</label>
    <input class="tt-text" name="captcha">
    <img src="{{captcha_src()}}">
</div>

使用自定义样式的验证码

return [
    ...

    'default' => [
        ...
    ],

    'code' => [
        'length'    => 4,
        'width'     => 120,
        'height'    => 36,
        'quality'   => 90,
        'sensitive' => true,
        'angle'     => 12,
        'sharpen'   => 10,
        'blur'      => 2,
        'invert'    => true,
        'contrast'  => -5,
    ]

];

调用自定义配置

<div class="form-group code">
    <label>验证码</label>
    <input class="tt-text" name="captcha">
    <img src="{{captcha_src('code')}}">
</div>

判断用户输入的验证码是否正确

$this->validate($request, [
    'captcha' => 'required|captcha'
]);
powered by GitbookEdit Time: 2023-04-08 10:28:32