Laravel基礎

1、Laravel核心目錄文件介紹

  • app:程序的核心代碼和業務邏輯代碼,其中的Http目錄是咱們業務邏輯的存放點
  • bootstrap:包含框架啓動的和自動加載文件
  • config:包含全部程序中的配置文件,好比:cache.php(緩存)database.php(數據庫)、queue.php(隊列)等
  • database:包括數據庫填充和遷移文件
  • public:程序入口和靜態文件,好比以後的CSS 、JS、IMG
  • resources:包含視圖和原始系統文件
  • storage:包含編譯後的文件
  • tests:單元測試目錄,存放測試代碼

2、路由、控制器

2.1 路由詳解

  • 場景:將用戶的請求轉發給相應的程序進行處理;
  • 做用:創建URL和程序(處理函數)之間的映射;
  • 類型:get,post,put,pathc,delete

    Tips: 業務邏輯不該該寫在路由當中,路由只是接收參數後轉發給控制器(Controller)進行處理php

2.1.1 get請求路由

Route::get('basic1',function(){
    return 'Hello World';
})

2.1.2 post請求路由

Route::post('basic2',function(){
    return 'basic2';
})

2.1.3 多請求路由

2.1.3.1 [類型], 路由名

Route::match(['get','post'],'multy1',function(){
    return 'multy1';
})

2.1.3.2 任意類型

Route::any('multy2',function(){html

return 'multy2';

})laravel

2.1.4 路由參數

Route::get('user/{id}',function($id){
    return 'USER-'.$id;
});

    將name賦默認值kitty,是name變爲可選項(加?)正則表達式

Route::get('user/{name?}',function($name = 'kitty'){
    return 'USERNAME-'.$name;
});

    將參數使用正則表達式來限制數據庫

Route::get('user/{name?}',function($name = 'kitty'){
    return 'USERNAME-'.$name;
})->where('name',[A-Za-z]+);    //name可由多個字母組成

Route::get('user/{id}/{name?}',function($name = 'kitty'){
    return 'USER-Id:'. $id . '  name:'.$name;
})->where['id'=>[0-9]+,'name'=>[A-Za-z]+]

2.1.5 路由別名

Route::get('user/member-center',['as' => 'center',function(){
    return 'member-center';
}]);

clipboard.png

2.1.6 路由羣組,prefix路由前綴

Route::group(['prefix' => 'member'],function(){
    Route::get('user/member-center',['as' => 'center',function(){
        return 'member-center';
    }]);
    Route::any('multy2',function(){
        return 'multy2';
    });
});

2.1.7 路由視圖

Route::get('view',function(){
    return view('welcome');//調用/laravel/resources/views/welcome.blade.php文件
});

2.2 路由和控制器綁定

  1. Route::請求方式('請求url',控制器名稱@控制器下的方法)
  2. Route::請求方式('請求url',['uses'=>控制器名稱@控制器下的方法])
  3. Route::請求方式('請求url',['uses'=>控制器名稱@控制器下的方法,'as'=>'別名'])
  4. Route::請求方式('/demo/{id}',[‘uses’=>控制器名稱@控制器下的方法])

2.3 視圖 - 使用模板

    直接在控制器裏面調用view而後return返回便可bootstrap

return view(路徑/模板, [待傳入的變量array格式]);

    例: return view('member/info', ['id'=>$id]);數組

3、數據庫操做

3.1 DB facade(原始查找)

    DB facade實現CURD(原生SQL語句操做數據庫 )緩存

3.1.1 插入數據 (返回bool 插入是否成功)

$result = DB::insert('insert into student(name,age) values(?,?)', 
['abcd',23]);

3.1.2 查詢數據 (返回array 全部查詢結果)

$result = DB::select('select * from student where id < ?', [
    1002
]);

3.1.3 修改數據 (返回int 受影響行數)

$result = DB::update('update student set age = ? where name = ?', [
    21, 'EnzoLiu'
]);

3.1.4 刪除數據 (返回int 受影響行數)

$result = DB::delete('delete from student where name = ?', ['abcd']);

    laraevl內置函數dd,可人性化的打印數組:dd($result);閉包

3.2 數據庫操做 - 查詢構造器

3.2.1 查詢構造器簡介

  1. Laravel 查詢構造器(query Builder)提供方便,流暢的接口,用來創建及執行數據庫查找語法
  2. 使用PDO參數綁定,以保護應用程序免於SQL注入,所以傳入的參數不需額外轉義特殊字符
  3. 基本能夠知足全部的數據庫操做,並且在全部支持的數據庫系統上均可以執行

3.2.2 查詢構造器CURD

3.2.2.1 查詢構造器 - 新增

  一、新增一條數據(返回bool類型 新增結果)app

$result = DB::table('student')->insert([
    'name' => 'Toky',
    'age' => 19
]);

  二、新增一條數據(返回int類型 新增後的主鍵ID)

$result = DB::table('student')->insertGetId([
    'name' => '親愛的路人',
     'age' => 19
]);

  三、增長多條數據(注: 只能使用insert 返回新增結果)

$result = DB::table('student')->insert(
    [
        ['name' => 'name1', 'age' => 31],
        ['name' => 'name2', 'age' => 32]
    ]
);
3.2.2.2 查詢構造器 - 更新
//返回影響的行數
DB::table('as_admin')->where('id', 12)->update(['age' => 18]);
//字段自增3寫,默認爲1法 返回影響的行數
DB::table('as_admin')->where('id', 12)->increment('age', 3);
//字段自減3寫,默認爲1法 返回影響的行數
DB::table('as_admin')->where('id', 12)->decrement('age', 3);
//自增或自減的同時更新name字段
DB::table('as_admin')->where('id', 12)->decrement('age', 3, ['name' => '張佳']);

3.2.2.3 查詢構造器 - 刪除數據

  關鍵詞:

delete 刪除數據
truncate 清空表,並將ID自增重置爲0

  示例代碼:

delete
DB::table("表名")->where('條件')->delete();

truncate
DB::table("表名")->truncate();

3.2.2.4 查詢構造器 - 查詢數據

    get - 查詢多條數據結果

DB::table("表名")->get();
DB::table("表名")->where(條件)->get();

    pluck - 查詢指定字段數據

DB::table("表名")->pluck("字段名");
DB::table("表名")->where(條件)->pluck("字段名");

    lists - 和 pluck 效果相同

DB::table("表名")->lists("字段名");
DB::table("表名")->lists("字段名1","字段名2");

    select - 指定要查詢的字段

DB::table("表名")->select("id","name")->get();

    結果分塊:若是你須要操做數千條數據庫記錄,能夠考慮使用 chunk 方法。這個方法每次只取出一小塊結果傳遞給 閉包 處理。例如,一次處理整個 users 表中的 100 個記錄:

DB::table('users')->orderBy('id')->chunk(100, function ($users) {
    foreach ($users as $user) {
        //
    }
});

    你能夠從 閉包 中返回 false 來阻止進一步的分塊的處理:

DB::table('users')->orderBy('id')->chunk(100, function ($users) {
    // Process the records...

    return false;
});

3.2.2.5 聚合函數

DB::table('as_admin')->select('id','name','age')->count(); //返回記錄數
DB::table('as_admin')->select('id','name','age')->max('age'); //最大值,min同理
DB::table('as_admin')->select('id','name','age')->avg('age'); //返回平均值
DB::table('as_admin')->select('id','name','age')->sum('sum'); //返回指定字段數據

3.3 Eloquent ORM

    clipboard.png

  建立Model類型,方法裏面聲明兩個受保護屬性:$table(表名)和$primaryKey(主鍵)

<?php
    namespace App;
    use Illuminate\Database\Eloquent\Model;
    class Student extends Model{
        protected $table = 'student';
        protected $primaryKey = 'id';
    }

3.1 Eloquent ORM查詢

  all: 經過orm獲取全部數據

$result = Student::all();

  find: 經過主鍵返回指定的數據

$result = Student::find(1001);

  findOrFail: 經過主鍵返回指定的數據 未查找到到則拋出異常

$result = Student::findOrFail(1001);

  獲取符合條件的數據

$student = Student::where('age', '<', 20)->get();

  分段式(分頁)獲取數據遞交給閉包函數循環處理

Student::chunk(2, function($student) {
     var_dump($student);
});

  查詢構造器之聚合函數

$result = Student::count();

3.2 Eloquent ORM 增長數據、自定義時間戳及批量賦值

  clipboard.png

  創建model類 (app\Student.php)

protected $table = 表名;
protected $promaryKey = 主鍵名;
public $timestamps = false;  //是否開啓時間戳自動調節
//使用時間戳存入數據庫
protected function getDateFormat() { return time(); } 
//將數據庫裏的時間戳取出時不被轉換爲日期
protected function asDatetime($val) { return $val; }  
protected $fillable = ['name', 'age']; //容許批量賦值的字段 白名單設置
protected $guarded = ['aa', 'bb'];  //不容許批量賦值的字段 黑名單設置

    $fillabel 是爲了防止注入攻擊,好比有的用戶可能在表單中注入了一些別的信息更改數據庫中的其餘內容,所以咱們要定義哪些數據是能被修改的,這裏就是’$fillabel’包含的內容纔可以被修改.而$hidden包含的內容則是指存儲時這些信息會被加密存儲,這樣即便數據庫泄露出去,信息也不會那麼容易直接被讀取。

3.2.1 經過模型新增數據(涉及到自定義時間戳)

$student = new Student();
$student -> name = 'stu1';
$student -> age = 20;
$student -> save();

3.2.2 使用模型的create方法新增數據(涉及到批量賦值)

$student = new Student();
$result = $student -> create([
    'name' => 'create',
    'age' => 30
]);

//firstOrCreate 查找數據並返回,若是不存在則插入該條數據並返回
$result = Student::firstOrCreate([
'name' => 'aj',
'age' => 32
]);

//firstOrNew 查找數據並返回,若是不存在則返回該類的對象,調用save才得以保存
$result = Student::firstOrNew(['name' => 'make']);
$result = $result->save();
dd($result);

3.3 Eloquent ORM 修改數據

  經過模型更新數據 (最後返回bool類型,單條數據是否修改爲功)

$student = Student::find(1051);
$student->name = 'aj2';
$result = $student->save();

  結合查詢語句批量更新 (返回int類型 受影響行數)

$result = Student::where('id', '>', 1050)
    ->update([
        'name'=>'adj',
        'age'=>32
    ]);

3.4 Eloquent ORM 刪除數據

  1. 使用模型刪除數據
  2. 經過主鍵值刪除數據
  3. 根據指定條件刪除數據

    //1.
    $student = Student::find(1001);
    $student ->delete();
    //2.
    Student::destroy(1001);
    Student::destroy(1001,1002);
    Student::destroy([1001,1002]);
    //3.
    Student::where('id', '>', 1004)->delete();

4、Blade模板引擎

4.1 Blade模板繼承

<body>
    <div class="header">
        @section('header')
        頭部
        @show
    </div>

    <div class="main">
        <div class="sidebar">
            @section('sidebar')
            側邊欄
            @show
        </div>

        <div class="content">
            @yield('content','主要內容區域');
        </div>
    </div>

    <div class="footer">
        @section('footer')
         底部
        @show
    </div>
</body>

  section是用來定義一個視圖片斷的
  yield 是用來展現某個指定的section裏所表達的內容 能夠將其假設爲一個佔位符用子模版去實現它
  區別:

  • yield是不可擴展的(由於他只聲明定義了一個視圖片斷沒有任何內容)
  • section既定義了視圖片斷,也能夠有內容,還能夠被子模版擴展

  在view中,模板繼承: 用@extends('模板名')
  模板重寫:

@section('重寫部分的名字')
    重寫的內容
@stop

  @yield的模板重寫也是同樣的用法。

4.2 基礎語法與include的使用

  1. 模板中輸出php變量
    {{ $name }}
  2. 模板中執行php代碼
    {{ date('Y-m-D H:i:s', time()) }}
  3. 模板中強制輸出 @{{ $name }} 字符串
    @{{ $name }}
  4. 模板註釋格,不會在查看源代碼中顯示,和html註釋的區別
    {{-- 模板註釋 --}}
  5. 子視圖引用 include
    @include('common1', ['message'=>'hello world'])

4.3 流程控制

   模板中的流程控制 @if @unless @for $foreach $forelse

4.3.1 if

@if($name == 'EnzoLiu')
    i'm EnzoLiu
@elseif($name == 'jeck')
    i'm jeck
@else
    who am i?
@endif

4.3.2 unless(與if反向)

@unless($name != 'EnzoLiu')
    我是EnzoLiu
@else
    我不是EnzoLiu
@endunless

4.3.3 for

@for($i=0; $i<10; $i++)
    {{ $i }}
@endfor

4.3.4 foreach 數組/對象遍歷

@foreach($res as $key => $value)
    {{ $key }}<br>{{ $value }}
@endforeach

4.3.5 forelse 循環(特殊)

    釋: $res若是有值則運行 $obj->name 代碼塊, 若是爲空則顯示 null

@forelse($res as $obj)
    {{ $obj->name }}<br>
@empty
    null
@endforelse

4.4 模板中URL

  一、 url()經過路由的名稱生成url

<a href="{{ url('url') }}">url()</a>

  二、 action()經過制定控制器及方法名生成url

<a href="{{ action('StudentController@urlTest') }}">action()</a>

  三、 route()經過路由的別名生成url

<a href="{{ route('url') }}">route()</a>

  參考視頻教程:輕鬆學會Laravel-基礎篇

相關文章
相關標籤/搜索