# 直接返回信息或简单处理,一般很少用这个
$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="">
# ajax自动携带tocken配置
<meta name="csrf-token" content="{{ csrf_token() }}" />
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
namespace App\Http\Middleware;
/**定义中间件-app/Http/Middleware
* $request 请求体-包含请求的相关信息
* $next 下一个中间件对象
*/
class BeforeMiddleware implements Middleware {
public function handle($request, Closure $next)
{
// Perform action
return $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)
{
//
}
}
$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');