Illuminate

laravel8更新之速率限制改进

♀尐吖头ヾ 提交于 2020-11-08 07:30:21
原文地址: https://www.wjcms.net/archives/laravel8%E6%9B%B4%E6%96%B0%E4%B9%8B%E9%80%9F%E7%8E%87%E9%99%90%E5%88%B6%E6%94%B9%E8%BF%9B Laravel的请求速率限制器功能已增强,具有更大的灵活性和功能,同时仍保持与先前版本的throttle中间件API的向后兼容性。 速率限制器是使用RateLimiter立面的for方法定义的。该for方法接受一个速率限制器名称和一个Closure,该Closure返回应应用于分配了该速率限制器的路由的限制配置: use Illuminate\Cache\RateLimiting\Limit; use Illuminate\Support\Facades\RateLimiter; RateLimiter::for('global', function (Request $request) { return Limit::perMinute(1000); }); 由于速率限制器回调接收传入的HTTP请求实例,因此您可以根据传入的请求或经过身份验证的用户动态构建适当的速率限制: RateLimiter::for('uploads', function (Request $request) { return $request->user(

Laravel 的缓存源码解析

别来无恙 提交于 2020-10-06 06:16:48
使用 直接使用Laravel为我们提供的Facade use Illuminate\Support\Facades\Cache; $cache = Cache::get('key'); 支持的大部分方法: Cache::put('key', 'value', $minutes); Cache::add('key', 'value', $minutes); Cache::forever('key', 'value'); Cache::remember('key', $minutes, function(){ return 'value' }); Cache::rememberForever('key', function(){ return 'value' }); Cache::forget('key'); Cache::has('key'); Cache::get('key'); Cache::get('key', 'default'); Cache::get('key', function(){ return 'default'; }); Cache::tags('my-tag')->put('key','value', $minutes); Cache::tags('my-tag')->has('key'); Cache::tags('my-tag')->get('key');

Laravel 获取 Route Parameters (路由参数) 的 5 种方法

…衆ロ難τιáo~ 提交于 2020-10-03 13:24:10
假设我们设置了一个路由参数: /** * 定义路由参数名称分别为: param1,param2 */ Route::get('/{param1}/{param2}', 'TestController @index '); 现在我们访问 http://test.dev/1/2 在 TestController 中: /** * 路由参数获取方法 * * @param Illuminate\Http\Request $request 依赖注入 Request 实例,放在参数中什么位置都可以自动加载 * @param mixed $arg2 要获取的路由参数 * @param mixed $arg1 要获取的路由参数 */ public function index(Request $request, $arg2, $arg1) { /** * 方法一:按照 URL 中路由参数先后顺序来获取 * 注意:此种方式有个小坑,获取的值只与顺序有关,与名称无关 */ echo $arg2; //结果为 1 ,因为 $arg2 在第一位,获取的是第一个路由参数 param1 的值 echo $arg1; //结果为 2 ,因为 $arg1 在第二位,获取的是第二个路由参数 param2 的值 /** * 方法二:按照路由参数名称来获取 * 注意:此处名称是 Route 中定义的参数名

laravel7使用auth进行用户认证

别等时光非礼了梦想. 提交于 2020-10-02 13:13:40
原文地址: https://www.wjcms.net/archives/laravel7%E4%BD%BF%E7%94%A8auth%E8%BF%9B%E8%A1%8C%E7%94%A8%E6%88%B7%E8%AE%A4%E8%AF%81 laravel7 版本移除了 auth,大家都知道以前版本是直接使用 php artisan make:auth就可以使用,但是这版本不行了,那么要怎么弄呢?今天和大家说一下具体步骤。 Laravel7 的 laravel/ui 包提供了一种快速方法,可以使用一些简单的命令来支持你进行身份验证所需的所有路由和视图: 安装依赖包laravel/ui 直接使用命令进行安装 composer require laravel/ui 创建auth脚手架 直接使用命令进行创建 #注意这里的vue为可选项,可以换成bootstrap react vue php artisan ui vue --auth 然后在运行npm命令进行编译 npm install && npm run dev 看到上图这样就编译好了。 这样就创建好auth脚手架了,这样页面就可以访问了,但是登录注册还不能使用。 数据迁移 先配置数据库,这里我用的是homestead环境,所以连接配置如下 然后执行迁移命令 php artisan migrate 页面使用查看效果 这时候打开首页

Laravel 中间件解析

陌路散爱 提交于 2020-08-19 22:00:53
Laravel 中间件 代码展示 protected function sendRequestThroughRouter($request) { # $this->app->instance('request', $request); # Facade::clearResolvedInstance('request'); # $this->bootstrap(); return (new Pipeline($this->app)) ->send($request) ->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware) ->then($this->dispatchToRouter()); // $this->dispatchToRouter(),后期继续 } new \Illuminate\Routing\Pipeline($this->app): public function __construct(Container $container = null) { $this->container = $container; } public function send($passable) { $this->passable = $passable; return $this; } public

打印 SQL 封装的方法 时间毫秒

偶尔善良 提交于 2020-08-19 11:15:43
/** * Notes:开始打印sql * User: smaller_fan * Date: 2020/7/2 * Time: 10:06 */ function begin_sql(){ \Illuminate\Support\Facades\DB::enableQueryLog(); } /** * Notes:结束打印sql * User: smaller_fan * Date: 2020/7/2 * Time: 10:06 */ function dd_sql(){ $res = \Illuminate\Support\Facades\DB::getQueryLog(); $all_time = array_sum(array_column($res,'time')); dd(['all_time'=>$all_time,'all_sql'=>$res]); } 来源: oschina 链接: https://my.oschina.net/guozhouyuan/blog/4511613

laravel 数据库迁移时报错

元气小坏坏 提交于 2020-08-11 07:52:19
原文地址: https://www.wjcms.net/archives/laravel%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%81%E7%A7%BB%E6%97%B6%E6%8A%A5%E9%94%99 问题描述 [Illuminate\Database\QueryException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`)) [PDOException] SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (1)laravel 5.4或者更高版本 改变了默认的数据库字符集,现在utf8mb4包括存储emojis支持。如果你运行MySQL v5.7.7或者更高版本,则不需要做任何事情。 (2)当你试着在一些MariaDB或者一些老版本的的MySQL上运行

Laravel update某一字段值为另一字段值

橙三吉。 提交于 2020-08-10 11:55:48
/* * * 批量初审 * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function borrowPiShen() { $record_id = Input::get('record_id' ); if ( empty ( $record_id )) { return BaseController::returnJson(405, '请选择数据', null ); } $record_id_arr = explode (',', $record_id ); $num = YunUserBorrow::whereIn('id', $record_id_arr ) ->where('status', 0 ) -> update( [ 'status' => 1, 'allow_no' => DB::raw('borrow_no'), 'name_zc' => AdminUser::getUserData()-> name ]); return BaseController::returnJson(200, "审核了{ $num }条记录", null ); } 来源: oschina 链接: https://my.oschina.net/u/4344191/blog

在 Laravel 7 中优雅使用 UUID 教程

只愿长相守 提交于 2020-08-08 16:49:02
最近我不得不在 Laravel 7 实现 通用唯一识别码 ( UUIDs ),并遇到一些问题。我希望这帖子可为其他正在做相同事情的人解惑。 使用 UUIDs 的高级理由 A) 它们从你的 统一资源定位符 移除编号的 身份识别号 ,故用户不能看到你的应用已创建多少确定的对象。例如: https://myapp.com/api/users/5 对比: https://myapp.com/api/users/0892b118-856e-4a15-af0c-66a3a4a28eed B) 它们让 身份识别号 远难于猜测。这有益于安全性,但我们可能应当实现其他技术以防范之。 作为主键实现 UUIDs 如何改变数据库迁移 首先,在数据库迁移中,你要将当前自动递增的 ID 字段替换为 UUIDs 。你还可以遵循以下方法:保留自动递增 ID 并将 UUID 作为表中的附加字段,在用户展示 URL 时使用 (在这种情况下,你将 ID 隐藏到模型中),但这不是我们能在这里做的。 让我们看看假设的 employees 表是什么样子的。 public function up() { Schema::create('employees', function (Blueprint $table) { $table->uuid('id')->primary; $table->string('name');

Lumen 框架如何更优雅的使用事务

风格不统一 提交于 2020-08-06 04:44:14
我说的事务指的是一般的数据库事务,而不是什么分布式事务之类高大上的概念。 听起来很简单,但是即便如此,想实现的优雅一点也不是一件容易的事情。 假设有一个 QA 系统,当用户在上面提问的时候,系统保存问题,然后更新用户的提问数,最后触发一个问题已经被创建的异步事件来解耦逻辑(代码均使用 Lumen 框架): 1 <?php 2 3 try { 4 DB :: beginTransaction (); 5 6 $question -> content = '...' ; 7 $question -> save (); 8 9 $user -> questions_count += 1 ; 10 $user -> save (); 11 12 DB :: commit (); 13 14 event ( new QuestionCreatedEvent ( $question )); 15 } catch ( Exception $e ) { 16 DB :: rollBack (); 17 } 18 19 ?> 随着业务逻辑越来越复杂,会出现很多问题,其一:事务处理相关代码的割裂感会越来越严重;其二:事务处理相关逻辑会重复散落在很多地方,很容易遗漏或错乱。 如何解决问题? 学院派面对此类问题,多半会搞出一个新的 service 层,专门用来处理事务,不过对我来说太重了