laravel框架5.6基礎
路由 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','[email protected]’);
});
控制器
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’,’[email protected]’); 即可訪問到 index方法
如果 下面還有目錄
例如 App\Http\Controllers\User\UserController 方法名 定義訪問 index 方法
Route::get(‘index’,’User\[email protected]’); 即可訪問到 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}','[email protected]’);
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>