路由 route
01
Route::请求方式 ($uri,回调函数/控制器@方法)
请求方式: get post put delete patch options
$uri www.lampol.com/index/login
02
回调函数 直接返回给浏览器
控制器@方法 进入控制器方法进一步处理
注意 post put delete patch 需要 进行表单csrf验证 暂时排除验证
app/Http/Middleware/VerifyCsrfToken.php
protected $except = [
'your/route'
];
03
匹配多种请求方式
Route::match([‘get’,’post’],$uri,function(){
});
04
匹配所有请求
Route::any($uri,function(){
});
05
重定向路由
Route::redirect('index','login’);
06
视图路由
Route::view($uri,视图);
07
路由参数
Route::get('user/{nane}/{age}',function($name,$age){
return $name.'=='.$age;
});
08
可选参数
Route::get('user/{nane?}',function($name='123'){
return $name;
});
09
过滤参数正则
Route::get('user/{ids?}',function($ids){
return $ids;
})->where(‘ids’,‘[a-z]+’); //多个参数过滤 后面加数组
10
路由组前缀
Route::prefix('admin')->group(function(){Route::get('user',function(){
return 'admin user’;
});
Route::get('order',function(){
return 'admin preder’;
});
});
11
命名空间
Route::namespace('Admin')->group(function(){Route::get('us','TestController@test’);
});
控制器
01
遵循规则
1 统一放在 app/Http/Controllers
2 命名空间 namespace App\Http\Controllers;
3 遵循PSR-4 类定义规范 文件名和类名一样 首字母大写
4 类名Controller.php 默认规则
5 可以继承 Controller.php 也可以不继承 推荐继承
可以 app/Http/Controllers 继续创建目录 目录名首字母大写
命名空间 namespace App\Http\Controllers\目录名
02
控制器的路由定义
在定义控制器路由时,我们不需要指定完整的控制器命名空间。默认的在App\Http\Controllers
例如 App\Http\Controllers\UserController 方法名 定义访问 index 方法
Route::get(‘index’,’UserController@index’); 即可访问到 index方法
如果 下面还有目录
例如 App\Http\Controllers\User\UserController 方法名 定义访问 index 方法
Route::get(‘index’,’User\UserController@index’); 即可访问到 index方法
03
单行为控制器
处理单个行为的控制器,你可以在控制器中放置一个 __invoke 方法:
Route::get(‘user‘,’控制器’); 默认会进入到 __invoke
04
资源控制器以及资源路由
Laravel 资源路由将典型的「CRUD」(增删改查)路由分配给具有单行代码的控制器。
创建多个路由来处理资源上的各种行为。生成的控制器为每个行为保留了方法
05
资源路由的创建
Route::resource('/article','ArticleController');
06
资源控制器部分资源路由
//允许访问的方法
Route::resource('/article','ArticleController',['only'=>['index','store','show']]);
//不可访问的方法
Route::resource('/article','ArticleController',['except'=>['index','store']]);
Blade模板引擎
Blade 是 Laravel 提供的一个简单而又强大的模板引擎。和其他流行的 PHP 模板引擎不同,Blade 并不限制你在视图中使用原生 PHP 代码。所有 Blade 视图文件都将被编译成原生的 PHP 代码并缓存起来,除非它被修改,否则不会重新编译,这就意味着 Blade 基本上不会给你的应用增加任何负担。
01
定义规则:
存放在 resources/views 目录。
Blade 视图文件使用 .blade.php 作为文件扩展名
02
模板引擎展示
index.blade.php
return view(‘index’) // 助手函数
user/index.blade.php
return view(‘user.index’)
03
传数据到视图
return view(‘index’,[‘name’=>’liudehua’])
return view('index‘)->with('age',33);
视图 数据输出
{{ 变量名 }}
04
CSRF 保护
Laravel 可以轻松地保护应用程序免受 跨站点请求伪造 (CSRF) 攻击,跨站点请求伪造是一种恶意攻击,它凭借已通过身份验证的用户身份来运行未经过授权的命令。
Laravel 会自动为每个活跃用户的会话生成一个 CSRF「令牌」。该令牌用于验证经过身份验证的用户是否是向应用程序发出请求的用户。
无论何时,当您在应用程序中定义HTML表单时,都应该在表单中包含一个隐藏的CSRF标记字段,以便CSRF保护中间件可以验证该请求, 您可以使用 @csrf Blade指令来生成令牌字段:
form 表单 添加 @csrf 或者 {{ csrf_field() }}
<input type="hidden" name="_token" value={{csrf_token()}}>
<form method="POST" action="/profile">
@csrf
</form>
05
csrf白名单
排除csrf的验证
URI 添加到 VerifyCsrfToken 中间件中的 $except 属性来排除对这类路由的 CSRF 保护:
protected $except = [
‘user‘,
‘user/*’
];
06
表单请求方法
@method(方法名)
{{ method_field(方法名)}}
<input type="hidden" name="_method" value="patch">
Request请求
通过依赖注入的方式来获取当前HTTP 请求的实例,你应该在控制器方法中类型提示 Illuminate\Http\Request。传入的请求的实例将通过 服务容器 自动注入
01
Request 类文档
https://laravel.com/api/5.6/Illuminate/Http/Request.html
02
引入Request
use Illuminate\Http\Request;
03
注入到方法里
public function index(Request $request){}
04
Request 常用方法
ip() 获取访问者ip 地址 // dd() 打印数据 并退出
userAgent() 获取访问者代理
route() 获取路由请求的详情
header() 获取请求头信息
url() 获取请求地址 不包括查询字符串
fullUrl() 获取请求地址 包括查询字符串
path() 获取请求路径
method() 获取请求的方法
isMethod(方法名) 判断请求方法
05
请求数据获取
路由带参数获取
Route::get('/test/{id}','UserController@test’);
public function test(Request $request){}
get(name,默认值) 获取get方式请求数据
query(name,默认值) 查询字符串 不加任何参数 获取所有的
post(name,默认值) 获取post发送的数据
input(name,默认值) 获取get/post发送的数据 //不带参数 获取所有
all() 获取所有送的数据
only(数组) 获取指定的name
except(数组) 不获取指定的name
merge(数组) 合并新的数据到请求数据中
replace(数组) 替换请求数据
keys() 获取所有的name
has(name) 判断是否传过来值
file() 获取文件的信息
session() 获取session值
cookie() 获取某cookie值
响应 Response
01
字符串数组
return 字符串/数组 数组 会给转为json
02
响应对象
Illuminate\Http\Response
返回完整的 Response 实例允许你自定义响应的 HTTP 状态码和响应头信息
return response($data,$code); //助手函数
03
可以操作header
return response($data, 301)->header('Content-Type', 'application/json');
04
响应cookie
cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly)
return response($data, 301)->cookie($key,$value,$minutes)
05
视图响应 控制响应的状态 以及header
return response()->view('index', ['name'=>'liudehua'], 300)->header('Content-Type', 'text/html’);
06
json响应
return response()->json($data);
07
jsonp响应
return response()->json($data)->withCallback($request->input('callback'));
08
文件下载
return response()->download($pathToFile, $name);
09
文件响应
return response()->file($pathToFile);
11
重定向 redirect
重定向响应是 Illuminate\Http\RedirectResponse 类的实例
助手函数redirect()
return redirect(路由);
12
重定向到外部域名
return redirect()->away('http://www.baidu.com’);
13
重定向并使用闪存的 Session 数据
return redirect('test')->with('name','liudehua’);
模板访问 用 session(‘name’)
14
重定向到之前位置
return back()->with('name','liudehua');
Cookie
01
引入 Cookie
use Illuminate\Support\Facades\Cookie;
02
写入 cookie
$cookie = Cookie::make($key,$value,$minutest); //创建一个cookie实例
//加入到队列
Cookie::queue($cookie );
03
获取 cookie
Cookie::get($key)
04
删除cookie
$user = Cookie::forget('username');
Cookie::queue($user);
05
判断cookie 是否存在
dd(Cookie::has('username'));
默认情况下,Laravel 生成的所有 Cookie 都是经过加密和签名,因此不能被客户端修改或读取。 如果你想要应用程序生成的部分 Cookie 不被加密,那么可以使用在 app/Http/Middleware 目录中 App\Http\Middleware\EncryptCookies 中间件的 $except 属性:
protected $except = [
'cookie_name',
];
Session
01
session配置
Session 的配置文件存储在 config/session.php
'driver' => env('SESSION_DRIVER', 'file’),
"file", "cookie", "database", "apc", "memcached", "redis", "array“
02
引入
use Illuminate\Support\Facades\Session;
03
session 的使用
Session::put(‘name’,‘liudehua’); //里面也可以用数组形式
获取
Session::get(‘name’)
Session::forget('name’);
清空所有session
Session::flush();
判断是否存在session
Session::has('key1’)
助手函数 存储
session([‘ag’=>33]); //必须传数组形式
获取
session('ag’)
Request 操作 session
//存
$request->session()->put('key', 'value’);
//获取
$request->session()->get('key', 'default’);
//判断
$request->session()->has('users’)
//删除
$request->session()->forget('key');
$request->session()->flush();
Balde模板
01
模板变量输出
{{变量名}}
注意:Blade {{}} 声明中的内容是自动通过 PHP 的 htmlentities 方法过滤的,用来防止 XSS 攻击。
02
不对变量进行过滤
{!! 变量名 !!}
模板内部可以直接使用php函数处理
由于许多 JavaScript 框架也是用花括号来表示要显示在浏览器的表达式, 可以使用 @ 符告诉 Blade 渲染引擎保持这个表达式不变
03
原样输出
@{{ name }}
04
注释
{{-- 此注释将不会出现在渲染后的 HTML --}}
05
流程控制
if语句
@if、@elseif、@else 和 @endif 指令构建
@if($score>60)
<p style="color:green">{{$score}} 不错啊 及格了呀 </p>
@elseif($score==60)
<p style="color:green">{{$score}} 真悬</p>
@else
<p style="color:red">{{$score}} 不及格 </p>
@endif
@isset @endisset
@isset($info)
<p> {{$info}} </p>
@endisset
<p>{{ $name or ‘default’ }}</p> //短语法
@switch
可以使用 @switch、@case、@break、@default 和 @endswitch 指令来构建 Switch 语句
@switch($age)
@case (20)
<p style="color:green">{{$age}} 不错啊 20了 </p>
@break
@case (30)
<p style="color:red">{{$age}} 不错啊 30了 </p>
@break
@default
<p style="color:yellow">{{$age}} 不错啊 多大了 </p>
@endswitch
06
循环
for
@for($i=0;$i<9;$i++)
<p> {{$i}}</p>
@endfor
@continue($i==5)
@break($i==7)
foreach
@foreach ($data as $v)
<p>此用户为 {{ $v }}</p>
@endforeach
07
纯PHP代码
@php
var_dump($data);
@endphp
08
模板继承和布局
@section('left')
这是左边侧边栏。
@show
@extends
@yield('content')
@section 命令定义了视图的一部分内容,而 @yield 指令是用来显示指定部分的内容。
master.blade.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" >
<title> @yield('title') </title>
<head>
<body>
@section('left')
这是左边侧边栏。
@show
@section('right')
这是右边的侧边栏。
@show
<div>
@yield('content')
</div>
</body>
</html>
index.blade.php
@extends('layout.master')
@section('title','这是个首页')
@section('left’)
@parent
我是左边的
@endsection
@section('right')
我是右边的
@endsection
@section('content')
<p>第一篇文章</p>
<p>第二篇文章</p>
@endsection
09
引入 子视图
@include('layout.header’)
10
视图数据共享
app/Providers/AppServiceProvider.php boot方法
use Illuminate\Support\Facades\View;
View::share('username','liudehua');
11
引入js css资源
直接放到 public 文件加下面
引入 的话 就是从 public下面开始
<script src="/js/jQuery.min.js"> </script>