路由

基本使用

# 直接返回信息或简单处理,一般很少用这个
$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. 机器视觉学习笔记:BP神经网络详解
  2. Markdown = PPT ?这个工具给力!
  3. 【Vegas原创】添加SQL Server Agent作业步骤中的运行身份
  4. android view取坐标点,Android 获取子 View 的位置及坐标的方式
  5. linux 内核 面试 机制,请你来说一下linux内核中的Timer 定时器机制
  6. 0421 AutoLayout的实践/基本使用
  7. HDU 3916 Sequence Decomposition 【贪心】
  8. 【Java】模拟分组交换网络的时延、丢包
  9. Spring注解之@Import用法解析
  10. 2021高考成绩查询镇远一中,【护航高考 消防同行】——镇远消防圆满完成高考期间消防安保任务...
  11. 任务35:JWT 认证授权介绍
  12. 计算机视觉--图像导数-图像梯度向量
  13. 3des解密 mysql_转角处拐弯007
  14. 教你如何解决SQL server中提示对象名无效
  15. linux cpu大小,如何查看linux cpu大小
  16. 算法 c语言实现 英文版 pdf,数据结构与算法分析++C语言描述++英文版++..pdf-得力文库...
  17. html火狐浏览器秒杀插件,火狐浏览器Firefox(已装载常用渗透插件) 2018-06
  18. 腾讯物联网系统TOS,内核移植起来比你想象的要简单
  19. (在WPS或者WORD中使用MathType编辑数学公式)写论文必备
  20. 监狱逃离 51nod1299 最小割

热门文章

  1. 河海大学计算机辅助,黄瑞
  2. 计算机输入法如何显示在桌面快捷方式,电脑桌面输入法图标不见了怎么办
  3. MarkDown-如何插入上划线,下划线,中划线汇总
  4. Gesture Recognition
  5. RTOS系列(12):使用SVC或PendSV启动OS流程详细分析
  6. 7-6 平面向量加法
  7. 快速保存微信文章中视频的方法
  8. stm32汉字字库显示实验与OLED的使用(开始于2021-09-01)
  9. migo获取header sap_SAP中migo什么意思
  10. GitHub Desktop 百度云分享