路由

基本使用

# 直接返回信息或简单处理,一般很少用这个
$app->get('/', function() {return 'Hello World';
});# 携带参数
$app->get('user/{id}', function($id) {return 'User '.$id;
});# 重命名并指向控制器-经常使用
$app->get('user/profile', ['middleware' => 'old','as' => 'profile', 'uses' => 'UserController@showProfile'
]);# 分组使用中间件
$app->group(['middleware' => 'foo|bar'], function($app)
{$app->get('/', function() {// Uses Foo & Bar Middleware});$app->get('user/profile', function() {// Uses Foo & Bar Middleware});
});# 分组通用命名空间
$app->group(['namespace' => 'Admin'], function($app) {// Controllers Within The "App\Http\Controllers\Admin" Namespace
});# tocken 使用
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>"># ajax自动携带tocken配置
<meta name="csrf-token" content="{{ csrf_token() }}" />
$.ajaxSetup({headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')}
});

中间件

实例

<?php namespace App\Http\Middleware;/**定义中间件-app/Http/Middleware
* $request 请求体-包含请求的相关信息
* $next 下一个中间件对象
*/
class BeforeMiddleware implements Middleware {public function handle($request, Closure $next){// Perform actionreturn $next($request);}// 该方法可以在响应发送给客户端的时候调用,可以接受respose参数public function terminate($request, $response){// Store the session data...}
}# 中间件注册,在bootstrap/app.php Register Middleware (其中容器,配置文件,服务提供者,路由加载,也都是在这个问题里面进行注册)
## 直接注册,所有人都可以用$app->middleware([App\Http\Middleware\ExampleMiddleware::class ]);
## 指定中间件给特定路由$app->routeMiddleware(['auth' => App\Http\Middleware\Authenticate::class,]);

请求实例对象操作

操作

# 利用外观模式(服务提供者)操作
use Request
$name = Request::input('name');# 利用以来注入方式引用
use Illuminate\Http\Request;
class UserController extends Controller {public function store(Request $request){$name = $request->input('name');}
}
## 外部在调用的时候将请求实例注入:UserController->store($this->request);# 常用基本操作
Request::input('name');// 直接取值
Request::input('name', 'Sally'); // 默认值
Request::has('name'); // 判断是否有值
Request::all(); // 所有值
Request::only('username', 'password'); // 多个值取
Request::except('credit_card'); // 除值以外
Request::flash();// 将当前请求的数据刷新到Session中
Request::old('username');// 调用上一个请求flash刷新的session内容
Request::cookie('name'); //获取cookie
$response->withCookie(cookie('name', 'value', $minutes)); //cookie添加到响应中
Cookie::queue('name', 'value'); // 在response之前创建cookie,并会自动添加到请求中
Request::file('photo'); // 获取上传文件对象
Request::hasFile('photo'); // 判断文件是否存在
Request::file('photo')->isValid(); // 确定上传文件是否有效
Request::file('photo')->move($destinationPath, $fileName);// 移动上传文件
Request::path(); // 检索请求 URI
$method = Request::method();// 检索请求方法
Request::isMethod('post');// 检索请求方法
Request::is('admin/*');// 确定请求路径是否匹配模式
Request::url();// 获取当前请求 URL

响应

# 自定义响应
return response($content, $status)->header('Content-Type', $value);# 重定向并缓存数据到session。两者可以同时完成,然后就可以再后续调用重定向数据
return redirect('user/login')->with('message', 'Login Failed');# 重定向到上一个url 并携带输入
return redirect()->back()->withInput();# 重定向到路由
return redirect()->route('profile', ['id' => 1]);# 创建文件下载响应
return response()->download($pathToFile);
return response()->download($pathToFile, $name, $headers);
return response()->download($pathToFile)->deleteFileAfterSend(true);#创建 JSON 响应
return response()->json(['name' => 'Abigail', 'state' => 'CA']);# 创建 JSONP 响应
return response()->json(['name' => 'Abigail', 'state' => 'CA'])->setCallback($request->input('callback'));

视图

# 视图返回,携带参数
return view('fileName.profile', ['name' => 'James']);# 通过一个文件路径生成一个视图:
return view()->file($pathToFile, $data);

认证

# 在.env 配置基本数据库信息
AUTH_DRIVER // 驱动
AUTH_MODEL // 数据库操作
AUTH_TABLE // 用户信息表
## 然后可以自动去查询是否匹配,根据第一个参数为key,匹配后面两个字段
Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1], $remember);Auth::check(); // 要确定用户是否已经登录到您的应用程序
Auth::viaRemember(); // 判断是否使用了remember
Auth::loginUsingId(1); // 通过ID登录认证 bool
Auth::once($credentials); // 单此请求登录,没有cookie和session
Auth::login($user); // 用户信息,等同于attempt
Auth::logout();// 注销

缓存

# redis 缓存
在 Lumen 中使用 Redis 缓存前,需要先通过 Composer 安装 predis/predis 包 (~1.0)。# 保存数据到缓存中
Cache::put('key', 'value', $minutes);# 使用 Carbon 对象设置缓存过期时间
$expiresAt = Carbon::now()->addMinutes(10);
Cache::put('key', 'value', $expiresAt);# 取出一条数据或返回默认值
Cache::get('key', 'default');
Cache::get('key', function() { return 'default'; });# 将一条数据永久保存到缓存中
Cache::forever('key', 'value');# 从缓存获取数据,如果不存在就向缓存保存一个默认数据。是否可以用于防止缓存击穿?
$value = Cache::remember('users', $minutes, function() {return DB::table('users')->get();
});# 从缓存取一条数据并在缓存中删除。是否可用于队列,或者加锁?
$value = Cache::pull('key');

加密

# 设置加密模式
Crypt::setMode('ctr');
Crypt::setCipher($cipher);
# 执行加密解密操作
$encrypted = Crypt::encrypt('secret');
$decrypted = Crypt::decrypt($encryptedValue);

错误和日志

# 处理错误
public function report(Exception $e)
{if ($e instanceof CustomException) {// TODO:修改$e的一些信息,然后再重新吧错误信息,给到父级去处理}return parent::report($e);
}# HTTP 异常
abort(403, 'Unauthorized action.');# 日志记录
Log::info('This is some useful information.');
Log::warning('Something could be going wrong.');
Log::error('Something is really going wrong.');# 获取日志实例,可在闭包等地方注入此依赖
$logger = app('Psr\Log\LoggerInterface');
function ($logger){$logger->warning();
}

事件

# 监听事件-当事件被触发时,事件对象将被传递给handle监听器的方法:
Event::listen('PodcastWasPurchased', '类@handle'
);
# 触发事件
Event::fire(new PodcastWasPurchased($podcast));
event(new PodcastWasPurchased($podcast));
# 停止事件的传播
Event::listen('App\Events\PodcastWasPurchased', function($event) {// Handle the event...return false;
});
# 事件排队,这样可以方便处理业务
use Illuminate\Contracts\Queue\ShouldBeQueued;
class SendPurchaseConfirmation implements ShouldBeQueued {public function (PurchasePodcast $event){//}
}

哈希

通过 Bcrypt 加密密码

$password = Hash::make('secret');

还可以直接使用 bcrypt 助手函数:

$password = bcrypt('secret');

对加密后的密码进行验证

if (Hash::check('secret', $hashedPassword))    {// 密码匹配...
}

检查密码是否需要重新加密

if (Hash::needsRehash($hashed))  {$hashed = Hash::make('secret');
}

辅助函数

list($keys, $values) = array_divide($array); // array_divide 把数组的key和val分别拆分成两个数组
array_dot($array);// 将多维数组展平为使用“点”表示法表示深度的单级数组# 方法返回一个包含所选嵌套元素的扁平数组
$array = [['developer' => ['name' => 'Taylor']],['developer' => ['name' => 'Dayle']]
];
$array = array_fetch($array, 'developer.name');
// ['Taylor', 'Dayle'];#该array_flatten方法会将多维数组展平为单个级别。
$array = ['name' => 'Joe', 'languages' => ['PHP', 'Ruby']];
$array = array_flatten($array);
// ['Joe', 'PHP', 'Ruby'];#该array_forget方法将使用“点”表示法从深度嵌套的数组中删除给定的键/值对。
$array = ['names' => ['joe' => ['programmer']]];
array_forget($array, 'names.joe');# 返回数组中的第一个元素。
$first = head($this->returnsArray('foo'));# 是否以给定的针结束。可以用于判断上传图片是否符合要求
$value = ends_with('This is my name', 'name');# 限制字符串中的字符数。
str_limit($value, $limit = 100, $end = '...');
str_contains# 是否包含给定的字符。
$value = str_contains('This is my name', 'my');# 增加结尾
$string = str_finish('this/string', '/');#确定给定字符串是否与给定模式匹配。星号可用于表示通配符。
$value = str_is('foo*', 'foobar');# 将字符串转换为其复数形式(仅限英文)。
$plural = str_plural('car');# 生成给定长度的随机字符串。
$string = str_random(40);# 将字符串转换为其单数形式(仅限英文)。
$singular = str_singular('cars');# 从给定的字符串生成 URL 友好的“slug”。str_slug($title, $separator);
例子:$title = str_slug("Laravel 5 Framework", "-");// laravel-5-framework# 将给定的字符串转换为StudlyCase.
$value = studly_case('foo_bar');

lumen 框架学习相关推荐

  1. jQuery框架学习第二天:jQuery中万能的选择器

    jQuery框架学习第一天:开始认识jQuery jQuery框架学习第二天:jQuery中万能的选择器 jQuery框架学习第三天:如何管理jQuery包装集 jQuery框架学习第四天:使用jQu ...

  2. ssm框架requestmapping找不到_框架学习,就是介么简单

    框架学习 程序员凯小白 最近实训ssm框架,SSM框架,是Spring + Spring MVC + MyBatis的缩写,这个是继SSH之后,目前比较主流的Java EE企业级框架,适用于搭建各种大 ...

  3. rose框架学习总结

    rose框架学习总结 rose框架为paoding rose框架 具体可见https://code.google.com/p/paoding-rose/ 1   对rose框架的整体认识 1.1B/S ...

  4. Hadoop学习笔记—18.Sqoop框架学习

    Hadoop学习笔记-18.Sqoop框架学习 一.Sqoop基础:连接关系型数据库与Hadoop的桥梁 1.1 Sqoop的基本概念 Hadoop正成为企业用于大数据分析的最热门选择,但想将你的数据 ...

  5. jQuery框架学习第一天:开始认识jQuery

    jQuery框架学习第一天:开始认识jQuery jQuery框架学习第二天:jQuery中万能的选择器 jQuery框架学习第三天:如何管理jQuery包装集 jQuery框架学习第四天:使用jQu ...

  6. Android接口和框架学习

    Android接口和框架学习 缩写: HAL:HardwareAbstraction Layer,硬件抽象层 CTS:CompatibilityTest Suite,兼容性测试套件 Android让你 ...

  7. selenium + python自动化测试unittest框架学习(二)

    1.unittest单元测试框架文件结构 unittest是python单元测试框架之一,unittest测试框架的主要文件结构: File >report >all_case.py &g ...

  8. SpringMVC框架--学习笔记(下)

    接上篇:SpirngMVC框架--学习笔记(上):https://blog.csdn.net/a745233700/article/details/81038382 17.全局异常处理: 系统中异常包 ...

  9. SpringMVC框架--学习笔记(上)

    1.SpringMVC入门程序: (1)导入jar包:spring核心jar包.spring-webmvc整合Jar包 (2)配置前端控制器:web.xml文件中 <?xml version=& ...

最新文章

  1. PHP 一个可以过滤非法脚本的函数
  2. 编程人员需知的Windows平台编程的环境设置技巧
  3. hi3559a100解码
  4. 持续集成部署Jenkins工作笔记0020---20.在GitHub上创建WebHook
  5. java 线程的可重入锁_java 多线程-可重入锁
  6. Windows10右键没有新建文本文件
  7. cad怎么导出jpg图片格式?
  8. 2021-07-21淘宝网第二次尝试
  9. linux系统忘记密码之破解密码
  10. SCI收录的IEEE期刊
  11. Pug 介绍和在 Vue 中使用
  12. 鸿蒙会出电脑系统吗,鸿蒙有没有可能出PC操作系统?
  13. ips入侵防御系统部署
  14. GitGitHub入门基础
  15. DLM learning materials
  16. 在破败中崛起,在寂灭中复苏。   沧海成尘,雷电枯竭,那一缕幽雾又一次临近大地,世间的枷锁被打开了,一个全新的世界就此揭开神秘的一角……
  17. Heckman两步法 | 样本选择模型 处理效应模型
  18. 从零开始的LC刷题(74): Reverse Vowels of a String
  19. 江卓尔:Upbit交易所被盗反而引起币价上涨
  20. 基于lucene的案例开发:纵横小说数据库操作

热门文章

  1. jvm调优【减少GC频率和Full GC次数】中Gc是什么
  2. java for无限循环
  3. Jetson nano(Ubuntu18.04) 网线连接电脑,实现VNC远程桌面
  4. 【综述】植物防御假说——Out of the quagmire of plant defense hypotheses
  5. 计算机农业应用答案,东北农业大学计算机应用技术网上作业及答案.doc
  6. 视频编解码 — SVC可伸缩性
  7. Android压力测试
  8. 微信小程序留言板设计
  9. [js高手之路]jquery插件开发实战-选项卡详解
  10. win10装sql2000卡在选择配置_win10系统安装SQL2000卡在MADC不动的解决方法