Laravel 是一款簡潔,優雅的一款框架,可以說是入門TP后的第二款可以選擇的框架。
目錄部分:
- app -> 自己寫的代碼
- http -> Controller -> 控制器
- bootstrap -> 框架自加載的文件
- config -> 配置文件
- database -> 關於數據庫
- public -> 靜態文件
- resources -> 視圖
- storage -> 編譯靜態文件
- tests -> 用於測試代碼
默認訪問的文件是:public->index.php
路由:
存放路徑:app/http/routes.php
TP 的訪問模式是 用戶訪問->控制器->Model->視圖
Laravel 的訪問模式 用戶訪問->路由->控制器->Model->視圖
簡單的說,Laravel是通過路由來訪問各個控制器的
類型:(常用的類型中的其中2種)
get: Route::get('basic1', function(){
return 'Hello World';
});
post: Route::post('basic2', function(){
return 'Hello World2';
});//不能用URL直接訪問
多請求路由
match: Route::match(['get', 'post'], 'multy', function(){
return 'Hello World3';
});//既可以用get方式訪問,也可以用post方式訪問,即是指定方式請求。
any: Route::any('matrh', function(){
return 'Hello World4';
});//響應所有http請求。
路由參數
get:Route::get('user/{id}', function($id){
return 'User-id-'.$id;
});
默認值
Route::get('user/{name?}', function($name = 'sean'){
return 'User-name-'.$name;
});
用正則表達式判斷
Route::get('user/{name?}', function($name){
return 'User-name-'.$name;
})->where('name', '[A-Za-z]+');//where('要匹配正則的字段', '正則的規則,用[]包含')
用正則判斷多個字段
Route::get('user/{id}/{name}', function($id, $name){
return 'User-id-' . $id . ' User-name-' . $name;
})->where(['id' => '[0-9]+', 'name' => '[A-Za-z]+']);
路由別名
Route::get('user/member-user', ['as' => 'member', function(){
return 'member-user';
}]);
路由群組
Route::group(['prefix' => 'member', function(){
Route::get('user/{name}', function($name){
return 'user-'.$name;
});
Rount::get('user/{id}', function($id){
return 'id ='.$id;
})
}]);//訪問的時候可以通過member前綴,訪問路由群組里面的路由 例如:
/* 原本是http://localhost/Laravel/laravel52/public/user/name
加上前綴后變成http://localhost/Laravel/laravel52/public/menber/user/name
同樣可以訪問
*/
路由中輸出視圖
Route::get('view', function(){
return view('welcome');
});
總結:項目中的代碼不能寫在這里。路由只是用來接受請求,並轉化給控制器中的方法進行處理。
控制器
路徑:app/HttpControllers
新建一個控制器
1.和TP一樣 MemberController.php
2.namespace App\Http\Controllers;
3.寫個類
eg:class MemberController extends Controller
{
public function info()
{
return 'member-info';
}
}
路由和控制器關聯
Route::get('member/info', 'MemberController@info');//Route::get('控制器名/控制器方法名', '控制器名Controller @ 控制器方法');
第二種方式:
Route::get('member/info', ['uses' => 'MemberController@info']);
控制器帶參數
Route::any('member/{id}', ['uses' => 'MemberController@info']);
在控制器方法里面:
public function info($id)
{
return $id;
}
當要限制參數類型
Route::any('member/{id}', ['uses' => 'MemberController@info'])->where('id', '[0-9]+');
視圖
路徑:resources/views
輸出視圖
public function info()
{
return view('目錄名/文件名');
}
前提是在視圖層建好這個文件
命名規則: 文件名.blade.php;
一般一個控制器對應一個目錄,如果控制器是MemberController.php 則建立一個member目錄,控制器里要的視圖存放在這個目錄里面
以上總結:和TP一樣
在控制器中帶變量
public function inin()
{
return view('menber', [
'name'=>'陳77',
'age'=>'老不死'
]);
}
模版中輸出變量
{{$name}} {{$age}}
模型
路徑:app
新建一個模型:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Member extends Model
{
public static function getMember()
{
return 'sean';
}
}
在控制器中使用
1.在開頭位置
use App/模型名;
2.因為上面的模型是用靜態方法定義
所以調用時候:模型名::模型里面的方法名();
操作數據庫
三種方式
DB facade(原始查找)
查詢構造器
Eloquent ORM
路徑:
config/database.php
'prefix' => '表前綴'(沒有可忽略)
對應.env文件
修改數據庫配置
vendor/.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1 //服務器地址
DB_PORT=3306//端口號
DB_DATABASE=homestead//數據庫名
DB_USERNAME=homestead//用戶名
DB_PASSWORD=secret//密碼
DB:原生語句查詢
$res = DB::select('select * from goods'); dd($res);(相當於TP中的dump());
增加
$res = DB::insert('insert into goods(name, age) values(?, ?)',['sean', 18]);
更改
$res = DB::update('update goods set age = ? where name = ?', ['17', 'sean']);
刪除
$res = DB::delete('delete from goods where id = ?', ['1001']);
查詢構造器(重點)用內置的方法對數據庫進行增刪改查
簡介:
提供方便,流暢的接口,用來建立以及執行數據庫操作
使用PDO參數綁定,以保護應用程序免於SQL注入因此傳入的是數據不需要另外轉義特殊字符串
基本可以滿足所有數據庫操作。
要訪問這個數據的方法,需要增加一條路由,輸入訪問的 URL 調用這個路由訪問到控制器里面的方法。
增加
DB::table('goods')->insert([
['name' => 'name1', 'age' => 18],
['name' => 'name2', 'age' => 12]
]);
DB::table('goods')->insertGetId([
['name' => 'name1', 'age' => 18],
['name' => 'name2', 'age' => 12]
]);//獲取到最后插入的ID
修改
DB::table('goods')->where('id', 2)->update(['age' => 13]);//把goods表的id=2的年齡改成age=13;
自增
DB::table('goods')->where('id', 2)->increment('age', 3);//把id=2的年齡自增3歲,不加數據默認自增一歲
自減
DB::table('goods')->where('id', 3)->decrement('age', 3)//把id=3的年齡自減3歲,不加數據默認自增一歲
自增/自減時候更改其他數據
DB::table('goods')->where('id', 2)->increment('age', 3, ['name', 'ii']);//自增的同時把name改成ii
刪除
DB::table('goods')->where('id', '>=', 3)->delete();//刪除id>=3的數據
DB::table('goods')->truncate();//清空數據庫,謹慎使用
查詢
get方法: $res = DB::table('goods')->get();//獲取表的所有數據
dd($res);//Laravel的打印方式
first順序方法: $res = DB::table('goods')->first();//順序獲取表的一條數據
first倒序方法: $res = DB::table('goods')->orderBy('id', 'desc')->first();//倒敘獲取表的一條數據
where方法: $res = DB::table('goods')->where('id', '<=', 1001)->get();//按條件獲取表的數據
where多個條件方法: $res = DB::table('goods')->where('id >= ? and age >= ?', ['1001', '18'])->get();//按多個條件獲取表的數據
pluck返回某個字段:$name = DB::table('goods')->pluck('name');//只返回name這個字段的值
lists返回某個字段:$name = DB::table('goods')->lists('name', 'id');//只返回name這個字段的值,同時可以指定某個下標
select指定查詢的字段:$name = DB::table('goods')->select('name', 'id')->get();//只查詢name, id 字段的值
chunk限定每次返回幾條:$name = DB::table('goods')->chunk(2, function($goods){
dd($goods);
return false;//加上這個條件,就只查詢一次,
});//每次只查詢兩條,查完為止