1. 程式人生 > >Laravel基本使用

Laravel基本使用

取ip info 運行 max table vid *** 路由 nsa

laravel
一.簡介
二.運行環境要求
1.php 版本>=5.5.9
2.Mcrypt PHP擴展 php的加密擴展,提供多種加密算法
3.openssl擴展 對傳輸的數據進行加密
4.mbstring擴展 提供了針對多字節字符串的函數,能夠幫助處理php多字節編碼
5.Tokenizer PHP擴展 php代碼片段解析
三.安裝
1.composer安裝
composer create-project laravel/laravel your-project-name --prefer-dist "5.1.*"
2.直接復制一份安裝好的即可

四.本地域名解析與apapche虛擬主機配置(window下)
1.打開:C:\Windows\System32\drivers\etc目錄中的hosts文件:
配置信息:127.0.0.1 自定義主機名

2.在apache的conf\extra的httpd-vhosts.conf配置文件中配置
<VirtualHost *:80>
ServerAdmin [email protected]

/* */
DocumentRoot "虛擬主機目錄位置"
ServerName 虛擬主機名
ErrorLog "logs/虛擬主機名-error.log"
CustomLog "logs/虛擬主機名-access.log" common
</VirtualHost>

註:配置虛擬主機出現的問題
①.配置好之後 localhost不能訪問
②.配置完成只能訪問根目錄
③.hosts文件打不開
五.配置
1.開發前必須要做的
①.配置虛擬主機
②.storage 和 vendor 目錄要讓服務器有寫入權限 linux
③.程序密鑰
(a).這裏是默認生成的,如果沒有的話可以使用命令
php artisan key:generate
(b).如果沒有key會報錯
No supported encrypter found. The cipher and / or key length are invalid.
④.修改時區
config/app.php ‘timezone‘=>‘PRC‘
優先建立出來 404 頁面
404.blade.php

SEO 搜索引擎優化

2.開發過程中要用到的
①.讀取和設置配置
(a).Config::get(‘app.timezone‘);
(b).Config::set(‘app.timezone‘,‘PRC‘);
②.獲取環境變量
(a).env(‘DB_HOST‘,‘‘);
③.關閉和啟動應用
(a).關閉 php artisan down 模版配置 resources/views/errors/503.blade.php
(b).開啟 php artisan up
④.URL重寫
public/.htaccess
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
六.路由:將信息從源地址傳遞到目的地的角色 abort
1.文件位置:app/Http/routes.php
2.基本路由
①.Route::get(‘/admin‘, function () {
return view(‘useradd‘);
});
// [email protected]

/* */
②.Route::post(‘/admin‘, function () {
return view(‘useradd‘);
});
使用post方式請求服務器的時候,可以先將http/kernel.php 中的第20行屏蔽
③.Route::put(); //修改
④.Route::delete(); //刪除
3.帶參數的路由
①.普通使用
Route::get(‘/goodsinfo/{id}‘, function ($id) {
echo "商品的id是".$id;
});
?a=123&b=456

②.限制參數類型
Route::get(‘/user/{id}‘,function($id){
echo $id;
})->where(‘id‘,‘\d+‘);
4.傳遞多個參數
①.Route::get(‘/user/{name}/{id}‘,function($name,$id){
echo $name;
echo "<br>";
echo $id;
})->where(‘id‘,‘\d+‘)->where(‘name‘,‘\d+‘);
5.路由別名 少
①.Route::get(‘/admin/user/delete‘,[
‘as‘=>‘udelete‘,
‘uses‘=>function(){
//快速獲得改地址
$url=route(‘udelete‘);
echo ‘ok‘;
}
]);
6.路由組設置 middleware
①.Route::group([],function(){

});
7.404頁面設置
resources/views/errors/404.blade.php
8.CSRF保護
POST 提交 自動執行 csrf

TokenMismatchException in VerifyCsrfToken.php line 53:
開啟了csrf的保護
csrf

七.中間件
1.創建(默認不直接生效)
php artisan make:middleware LoginMiddleware
2.事例代碼
$ip=$request->ip();
$path=$request->path();
file_put_contents(‘./ips.txt‘,$ip.‘------‘.$path."\r\n",FILE_APPEND);

路徑的問題
相對路徑 ../ ./ 絕對路徑 /

php語言 絕對路徑 / 代表 盤符根目錄
./ ../ 相對路徑 入口文件 所在的目錄 public
html的絕對路徑 / 當前的域名 所指定的目錄 public

在laravel中 php端一律使用相對路徑 html端 一律使用絕對路徑
echo "<img src=‘/1.jpg‘>";
include ""; 相對路徑


3.註冊app/Http/Kernel.php
①.全局註冊:$middleware 命名空間\類名::class
\App\Http\Middleware\LoginMiddleware::class
①.局部註冊:$routeMiddleware 別名=>命名空間\類名::class
‘login‘=> \App\Http\Middleware\LoginMiddleware::class
4.使用

Route::get(‘/admin‘, [
‘middleware‘=>‘admin‘,
‘uses‘=>function(){
echo ‘後臺‘;
},
]);


八.控制器
1.創建控制器
php artisan make:controller UserController --plain
2.路由以及訪問
①.普通用法
Route::get(‘/stu/add‘,[email protected]);
②.帶參數訪問
(a).路由帶參數
Route::get(‘/stu/del/{id}‘,[
‘uses‘=>[email protected],
]);
控制器函數 需要截取形參$id
public function del($id){}

(b).原生參數 ?id=123
public function add(request $request){
$id=$request->input(‘id‘);
echo $id;
}

③.別名
Route::get(‘/stu/del/{id}‘,[
‘as‘=>‘udel‘,
‘uses‘=>[email protected],
]);
④.中間件控制
(a).第一種方法
Route::get(‘/admin‘, [
‘middleware‘=>‘login‘,
‘uses‘=>[email protected]
]);
(b).第二種方法
Route::get(‘/stu/update‘,[email protected])->Middleware(‘login‘);

⑤.隱式控制器
(a).路由
Route::controller(‘users‘,‘UserController‘);
//所有請求為users的 都由UserController來完成
註:運行artisan命令的時候 要保證當前腳本不能有報錯

post/getStu

(b).使用
控制器中方法起名規則
public function 請求方式+路徑(){}
例如:
所訪問的路徑是 users/add
public function getAdd(){}
⑥.restful 資源控制器
Route::resource(‘type‘,‘TypeController‘);
九.請求
1.基本信息獲取 了解
①.請求方法 $request->method();
②.檢測方法 $request->isMethod(‘post‘);
③.請求路徑 $request->path();
④.請求完整url $request->url();
⑤.獲取ip $request->ip();
⑥.獲取端口 $request->getPort();


⑦.獲取頭信息 $arr=$request->header(‘Connection‘);

******************************
2.提取請求參數 POST GET
①.提取參數 $request->input(‘name‘);
②.設置默認值 $request->input(‘name‘,‘xy‘);
③.檢測是否存在 $request->has(‘name‘);
④.提取所有參數 $arr=$request->all();
⑤.提取部分 $arr=$request->only([‘username‘,‘password‘]);
⑥.提取部分 $arr=$request->except([‘username‘,‘password‘]);

3.文件操作
①.檢測是否有文件上傳 $request->hasFile(‘表單name值‘);
②.將文件移動到指定位置 $request->file(‘表單name值‘)->move(‘路徑‘,‘新名字‘);

路徑的問題
前臺 html代碼
絕對路徑 / 域名 直接 綁定的 那個文件夾 public裏面的東西
不能寫相對路徑
php
絕對路徑 / 當前項目所在的盤符的根目錄
相對路徑 ./ 當前入口文件所在的路徑

總結 laravel裏面 html代碼 絕對路徑 php代碼 相對路徑
echo "<img src=‘1.jpg‘>"; html 絕對路徑
include file_get_content fopen ....... php 函數

4.cookie操作
①.設置 \Cookie::queue(‘cookie名‘,‘cookie值‘,過期時間);


return response(‘‘)->withCookie(‘cookie名‘,‘cookie值‘,過期時間);

②.讀取 \Cookie::get(‘name‘);


$request->cookie(‘name‘);

//路由的路徑的名字 和 public裏面的文件夾的名字千萬不要同名 同名 默認走的public裏面的文件夾 *****************


5.閃存信息:基於SESSION 用來存儲請求參數的 session 關閉瀏覽器 flash 只要刷新一下頁面 就失效 主要用來做註冊
①.將所有的請求參數寫入閃存中 $request->flash();
②.將部分參數寫入閃存中 $request->flashOnly(‘參數1‘,‘參數2‘..);
③.除去某些參數之外的參數 $request->flashExcept(‘參數1‘);
④.簡便使用 return back()->withInput();

獲取閃存的參數 old(‘參數‘)


十.響應
1.返回字符串 return "string"; 相當於 echo
2.設置cookie return response(‘‘)->withCookie(‘名‘,‘值‘,時間);

3.返回json return response()->json(["a"=>100,"b"=>2000]);

4.下載文件 return response()->download(‘web.config‘);
5.頁面跳轉 return redirect(‘/goods/add‘); return back(); //返回上一頁
6.顯示模版 return response()->view(‘user‘); return view(‘‘);

十一.視圖
1.解析模版 view(‘user.add‘); // \ / 都可以
2.分配數據到模版
view(‘user.add‘,[]);
3.模版引擎blade
①.模版的默認存放位置 resource/views
②.使用變量 {{$username}}
③.設置函數 {{time()}}
④.設置默認值 {{$user or ‘guest‘}}
⑤.顯示html代碼 {!! $name !!}
⑥.引入子視圖 @include(‘header‘)
⑦.模版繼承 @extends(‘index‘)


(a).占位符 @yield(‘title‘)

@section(‘content‘)
@show

(b).新模板內容
@section(‘title‘,‘new Title‘)

@section(‘content‘)
[ @parent ]
新內容
@endsection
4.流程控制
① 判斷
@if($t==1)
處理
@elseif(count($records)>1)
處理
@else
處理
@endif
②.循環控制
@for($i=0; $i<10; $i++)
處理
@endfor
@foreach($users as $k=>$v)
處理
@endforeach

十二.數據庫操作

1.支持的數據庫類型
mysql Postgres SQLite SQLServer
2.數據庫連接配置
①.文件位置 config/database.php
②..env環境快速配置
3.數據庫基本操作
***********************************************
使用數據庫的類的時候 一定要在上面現引入命名空間
use DB;
否則
Class ‘App\Http\Controllers\DB‘ not found
***********************************************

①.查詢 DB::select()
②.插入 DB::insert
③.更新 DB::update
④.刪除 DB::delete

//上面的都不要記住

⑤.一般語句 DB::statement(‘drop table users‘);
* ⑥.事務操作 DB::beginTransaction()
DB::rollBack()
DB::commit()

* ⑦.操作多個數據庫 DB::connection(‘數據庫別名‘)->select();

4.構造器
①.增刪改查
(a).插入
單條: DB::table(‘stu‘)->insert([‘name‘=>‘xy‘,‘age‘=>46]);
多條: DB::table(‘stu‘)->insert([[‘name‘=>‘xy‘,‘age‘=>46],[‘name‘=>‘xy‘,‘age‘=>46]]);
獲取id插入: $id=DB::table(‘stu‘)->insertGetId([‘name‘=>‘xy‘,‘age‘=>46]);
(b).更新
DB::table(‘stu‘)->where(‘id‘,1)->update([‘name‘=>‘xy‘])
(c).刪除
DB::table(‘stu‘)->where(‘id‘,‘<‘,‘100‘)->delete();
(d).查詢
查詢所有: DB::table(‘stu‘)->get()
查詢單條: DB::table(‘stu‘)->first();
查詢單條結果中的某個字段 DB::table(‘stu‘)->value(‘name‘)
獲取一列數據 DB::table(‘stu‘)->lists(‘name‘)
②.連貫操作
(a).設置字段名 DB::table(‘stu‘)->select(‘name‘,‘email as user_email‘)->get();
(b).條件
DB::table(‘stu‘)->where(‘name‘,‘like‘,‘%a%‘);->get();
DB::table(‘stu‘)->where(‘name‘,‘>‘,‘100‘)->orwhere(‘name‘,‘xy‘)->get()
DB::table(‘stu‘)->whereBetween(‘id‘,[1,5])->get()
DB::table(‘stu‘)->whereIn(‘id‘,[1,2,3])->get()
(b)排序 orderBy(‘name‘,‘desc‘);
(c)分頁 DB::table(‘stu‘)->skip(10)->take(5)->get();
(d)分組 DB::table(‘stu‘)->groupBy(‘name‘)->having()->get();
(e)連接表 DB::table(‘stu‘)->join(‘class‘,‘stu.cid‘,‘=‘,‘class.id‘)->select(‘stu.name‘,‘class.cname‘)->get();
(f)計算
總數 DB::table(‘stu‘)->count();
最大值 DB::table(‘stu‘)->max(‘price‘) // min
平均值 DB::table(‘stu‘)->avg(‘price‘)

5.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);
});
②.
routes.php
Event::listen(‘illuminate.query‘,function($query){
var_dump($query);
});

十三.設置自定義函數和自定義類文件
1.建立出自定義文件 例如:app/common/function.php
2.在項目下的composer.json中添加信息
"autoload":{
"classmap":[
"database"
],
"psr-4":{
"App\\":"app\"
},
"files":[
"app/common/function.php"
]
}
3.dos界面當中composer dump-auto

十四.調試工具
1.debugbar安裝
composer require barryvdh/laravel-debugbar

在config/app.php裏面的providers添加
Barryvdh\Debugbar\ServiceProvider::class,

2.chrome 插件 postman FQ 安裝

防止csrf攻擊
打開 app/kernel.php 第20行

{{csrf_field()}} 生成了一個hidden 表單提交

{{csrf_token()}} 生成了一個 token字符串 ajax



Laravel基本使用