-
Laravel使得防止应用遭到跨站请求伪造攻击变得简单。跨站请求伪造是一种通过伪装授权用户的请求来利用授信网站的恶意漏洞。
-
Laravel自动为每一个被应用管理的有效用户Session生成一个CSRF“令牌”,该令牌用于验证授权用户和发起请求者是否是同一个人。想要生成包含CSRF令牌的隐藏输入字段,可以使用帮助函数
csrf_field
来实现:
<?php echo csrf_field(); ?>
帮助函数csrf_field生成如下HTML:
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
- 当然还可以使用Blade模板引擎提供的方式:
- 使用post提交
{!! csrf_field() !!}
{{csrf_field()}}
- 使用post提交
- 你不需要了解在POST、PUT或者DELETE请求时CSRF令牌是如何进行验证的,HTTP中间件VerifyCsrfToken会为我们做这项工作:将请求中输入的token值和session中的存储的作对比。
-
路由 :
- 文件位置
app/Http/routes.php
- 基本路由
Route::get('/love', function(){return '弄啥来'})
Route::post('/insert', function(){})
Route::put(....)
Route::delete('....');
- 带参数的路由 :
-
普通使用
Route::get('/goods/{id}', function($id){ echo $id; });
-
限制参数类型 :
Route::get('/param/{name}', function($name){ return $name; })->where('name','[a-z]+');
-
- 传递多个参数 :
Route::get('/getParams/{name}/{id}', function($name, $id){ //请求对象 // echo $request->route('name'); // echo $request->route('id'); });
- 路由别名 :
Route::get('/Home/Goods/show/{id}', ['as'=>'goods', function($id){ //普通创建url // echo url('/param/hahah').'<br>'; //路由别名创建url // echo route('goods',['id'=>11]).'<br>'; //实现页面跳转 // return redirect()->route('goods',['id'=>12]); //获取路由名称 return Route::currentRouteName(); }]);
- 路由组设置 :
Route::group([], function(){ Route::get('/404', function(){ abort(404,'not found!!!'); }); });
- 文件位置
-
中间件 :
- 作用 : 关卡,过滤
- 创建(默认不直接生效)
php artisan make:middleware LoginMiddleware
- 事例代码 :
<?php namespace App\Http\Middleware; use Closure; class LoginMiddleware { public function handle($request, Closure $next) { //request变量 记录所有的请求参数 if(!$request->cookie('uid')) { return redirect('/'); } return $next($request); } } ?>
- 注册 :
- 全局注册
Kernel.php >>>> $middleware成员属性 protected $middleware = [ \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, \app\Http\Middleware\TestMiddleware::class ];
- 路由注册
Kernel.php >>>> $routeMiddleware成员属性 protected $routeMiddleware = [ 'auth' => \app\Http\Middleware\Authenticate::class, 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 'can' => \Illuminate\Foundation\Http\Middleware\Authorize::class, 'guest' => \app\Http\Middleware\RedirectIfAuthenticated::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'test' => \app\Http\Middleware\TestMiddleware::class, ];
- 全局注册
- 使用 :
Route::get('/middle', [ 'middleware'=>'test', 'uses'=>function(){ return 'iloveyou'; } ]); Route::get('/mm', function(){ return 'mm'; })->middleware('test');
-
控制器 :
- 创建控制器
php artisan make:controller IndexController --plain
php artisan make:controller IndexController
- 路由访问
- 普通访问
Route::get('/User/add', 'UserController@add');
- 带参数访问
Route::get('/User/edit/{id}', 'UserController@edit');
- 别名
设置: Route::get('/User/index', ['uses' => 'UserController@index','as' => 'user']); 使用: route('user')
- 中间件控制
Route::get('/user/edit/{id}', [ 'middleware' => 'login', 'uses' => 'TestController@edit'] ); Route::get('/user/edit/{id}', 'TestController@edit')->middleware('login');
- 隐式控制器
- 路由
Route::controller('users', 'UserController');
- 使用
<?php namespace App\Http\Controllers; class UserController extends Controller { /** * 响应/users的GET请求 */ public function getIndex() { // } /** * 响应/users/show/1的GET请求 */ public function getShow($id) { // } } ?>
- 路由
- 普通访问
- 创建控制器
-
请求 :
- 基本信息获取
- 请求路径
$request->path()
- 检测路径
$request->is('admin/*')
- 获取完整url
$request->url();
- 获取请求方法
$request->method();
- 检测方法
$request->isMethod('post')
- 获取指定类型的参数
\Input::get('id');
- 请求路径
- 提取请求参数
- 基本获取
$name = $request->input('name');
- 设置默认值
$request->input('name', 'Sally');
- 检测是否存在
$request->has('name')
- 提取所有的参数
$input = $request->all();
- 提取部分 :
$request->only(['username', 'password']);
$request->except(['credit_card']);
- 基本获取
- 闪存信息
- 将所有的请求参数写入闪存中
$request->flash()
- 将部分参数写入闪存中
$request->flashOnly('title','price') 配合: old() {{old('price')}}
- 除去某些参数之外的参数
$request->flashExcept('_token');
- 简便使用
return back()->withInput();
- 将所有的请求参数写入闪存中
- 文件操作
- 检测是否有文件上传
$request->hasFile('photo')
- 将文件移动到指定位置
$request->file('photo')->move('./uploads/', 'iloveyou.jpg'); ------------------------------------------------ //图片上传 public function file_upload(Request $request){ if($request->hasFile('photo')){ foreach($request->file('photo') as $photo){ $filename = str_random(5).time(); //文件后缀名 $suffle= $photo->getClientOriginalExtension(); $photo->move('./uploads',$filename.'.'.$suffle); } }else{ return 'File error'; } }
- 检测是否有文件上传
- cookie操作
- 设置
\Cookie::queue('name','iloveyou',10);
return response('haha')->withCookie('uid',10,10);
- 读取
$request->cookie('name');
\Cookie::get('name');
- 设置
- 基本信息获取
-
响应 :
- 返回字符串
return '哈哈哈';
- 设置cookie
return response('')->withCookie('id',20,60);
- 显示模板
return response()->view('goods.add');
- 返回json
return response()->json(['a'=>100,'b'=>2000]);
- 下载文件
return response()->download('web.config');
- 页面跳转
return redirect('/goods/add');
- 返回字符串
-
视图 :
- 解析模板
view('user.add');
- 分配数据到模板
view('user.edit',['username'=>'admin'])
- 模板引擎blade :
- 模板的默认存放位置
resources/views
- 占位符 :
@yield('title') @section('content') .... @show
- 继承新模板内容
@extends('index') @section('title', 'new Title') @section('content') new contents is here @endsection
- 使用变量
{{$username}}
- 使用函数
{{time()}}
- 设置默认值
{{$username or 'guest'}}
- 显示html代码
{!! $name !!}
- 引入子视图
@include('header')
- 流程控制:
@if (count($records) === 1) I have one record! @elseif (count($records) > 1) I have multiple records! @else I don't have any records! @endif
- 循环控制:
@for ($i = 0; $i < 10; $i++) The current value is {{ $i }} @endfor @foreach ($users as $user) <p>This is user {{ $user->id }}</p> @endforeach
- 模板的默认存放位置
- 解析模板
-
数据库操作 :
- 支持的数据库类型
- MySQL
- Postgres
- SQLite
- SQL Server
- 数据库连接配置
- 文件位置
config/database.php
- 结果集的返回类型
'fetch' => PDO::FETCH_ASSOC
- .env环境快速配置
- 文件位置
- 数据库基本操作
- 查询
DB::select
- 插入
DB::insert
- 更新
DB::update
- 删除
DB::delete
- 一般语句
DB::statement('drop table users');
- 事务操作 :
DB::beginTransaction
DB::rollBack()
DB::commit()
- 操作多个数据库
DB::connection('foo')->select(...)
- 查询
- 构造器
- 增删改查
- 插入
- 单条
DB::table('users')->insert( ['email' => 'john@example.com', 'votes' => 0] );
- 多条
DB::table('users')->insert([ ['email' => 'taylor@example.com', 'votes' => 0], ['email' => 'dayle@example.com', 'votes' => 0] ]);
- 获取id插入
$id = DB::table('users')->insertGetId( ['email' => 'john@example.com', 'votes' => 0] );
- 更新
DB::table('users') ->where('id', 1) ->update(['votes' => 1]);
- 删除
DB::table('users')->where('votes', '<', 100)->delete();
- 查询
- 查询所有
DB::table('users')->get()
- 查询单条
DB::table('users')->first()
- 查询单条结果中的某个字段
DB::table('user')->value('username')
- 获取一列数据
DB::table('user')->lists('username')
- 查询所有
- 插入
- 连贯操作
- 设置字段
DB::table('users')->select('name', 'email as user_email')->get()
- 条件
DB::table('users') ->where('name', 'like', 'T%') ->get() DB::table('users') ->where('votes', '>', 100) ->orWhere('name', 'John') ->get(); DB::table('users') ->whereBetween('votes', [1, 100])->get() DB::table('users') ->whereIn('id', [1, 2, 3]) ->get()
- 排序
orderBy('name', 'desc')
- 分页
DB::table('users')->skip(10)->take(5)->get();
- 连接表(join) :
DB::table('users') ->join('contacts', 'users.id', '=', 'contacts.user_id') ->join('orders', 'users.id', '=', 'orders.user_id') ->select('users.*', 'contacts.phone', 'orders.price') ->get();
- 计算
- 总数
DB::table('users')->count()
- 最大值
DB::table('orders')->max('price')
- 平均值
DB::table('orders')->avg('price')
- 总数
- 增删改查
- sql语句记录
App/Providers/AppServiceProvider.php boot方法中添加 DB::listen(function($sql, $bindings, $time){ //写入sql file_put_contents('.sqls', "[".date('Y-m-d H:i:s')."]".$sql."\r\n", FILE_APPEND); });
- 支持的数据库类型
-
设置自定义函数和自定义类文件 :
app/library/helper.php
在项目下的composer.json中添加信息
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/"
},
"files":[
"app/Library/helper.php"
]
},