杂项
Cookie
设置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);
cookie 是否存在
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'
]);