laravel 5.6初學筆記

laravel 5.6初學筆記

http://note.youdao.com/noteshare?id=bf4b701b49dd035564e7145ba2d978b4
框架簡介
  • laravel文檔齊全
  • 社區活躍
  • 後期維護好,強大的工具

下載安裝
  • 環境要求,php版本在7以上(要與框架所需一致)
  • 集成環境,建議使用laralgon(適應laravel框架開發)
  • 安裝可以使用conposer(自行看官方文檔),也可在laravel學院下載一鍵安裝包(不用再配置環境和下載安裝依賴)
  • 環境配置根目錄要指向項目目錄中的public
項目目錄
  • app/Http/Controllers [控制器存放的位置,MVC中的C]
  • bootstrap 包含框架啓動和自動加載配置的文件(app.php和autoload.php)
  • config 包含全部應用程序的配置文件(緩存數據庫隊列)
  • database 包含數據庫的遷移和數據填充文件
  • public 包含入口和項目靜態資源文件(js,cs)
  • resources/view 包含了視圖和原始的資源文件
  • routes 路由入口文件目錄
  • storage 包含了編譯後的模板文件和緩存文件,日誌文件
  • tests 單元測試目錄文件
  • vendor 加載的依賴模塊

路由
  • 歸納 將用戶的請求轉發給相應的程序進行處理,創建程序和url之間的映射。
  • laravel 中的請求方式有:get post put pacth any
    delete
// 基礎路由 get
// http://localhost/testGet
Route::get('testGet', function(){
    return 'HELLO WORLD';
});

// 基礎路由 post
Route::post('testPost', function (){
    return 'Hello Post';
});

// 多請求路由 match
// http://localhost/testMatch
Route::match(['get','post'],'testMatch', function (){
    return 'Hello match';
});

// 多請求路由 any
// http://localhost/testAny
Route::any('testAny', function(){
    return 'Hello any';
});

// 路由參數
// http://localhost/testGetUser/12
/*Route::get('testGetUser/{id}', function ($id){
    return 'testGetUserId='.$id;
});*/

/*// 路由參數
// http://localhost/testGetUser/name
Route::get('testGetUser/{name?}', function ($name = 'NULL'){
    return 'testGetUserName='.$name;
})->where('name','[A-za-z]+')*/;

// 路由參數
// http://localhost/testGetUser/1/name
/*Route::get('testGetUser/{id}/{name?}', function ($id, $name = 'NULL'){
    return 'id='.$id.'testGetUserName='.$name;
})->where(['id'=>'[0-9]+','name'=>'[A-za-z]+']);*/

// 路由別名[爲整個路由取別名]
// http://localhost/testGetUser/center
Route::get('testGetUser/center',['as' => 'center', function(){
   return  route('center');
}]);

// 路由羣組
// http://localhost/member/testAny
Route::group(['prefix' => 'member'], function (){
    Route::any('testAny', function(){
        return 'Hello member-any';
    });
});

// 路由中輸出視圖
// http://localhost/view
Route::get('view', function (){
   return view('welcome');
});

一次訪問週期 【流程】
  • 入口 public/index.php
  • 建立服務器容器(用於管理類依賴和執行依賴注入的工具)
  • 發送請求到http內核和consle內核(分別用來處理web請求和
    Artisan命令)
  • 內核啓動載入服務提供者,註冊提供者,服務提供者啓動lavavel框架中的各類重要組件(例如,數據庫,路由,隊列,驗證器)【最爲重要的部分】。
  • 請求教友路由器進行分發,並運行路由器制定的中間件。
服務器容器
  • 歸納:用於管理依賴和執行依賴注入的工具
  • 綁定:幾乎全部的服務器容器都在服務提供者中完成的
    門面
  • 歸納:門面就是爲容器對象提供一個訪問方式的類
    中間件
  • 歸納:中間件爲過濾進入應用的HTTP請求提供了一套便利的機制。
  • 用法:

    一,相似於tp框架中的Behavior,或鉤子的用法。用於請求的前期驗證或後期驗證處理。

    二,CORS 中間件能夠用於,請求方法增長請求頭。

    三,日誌中間件能夠記錄全部進入站點的請求。
  • 中間件組:更爲快捷的實現一次分配給路由多箇中間件組;指定一箇中間鍵名將相關中間件放到一個組裏。
  • 中間件參數,中間件能夠傳遞額外的自定義參數。
  • 終端中間件,用於請求完成以後的善後操做。
    CSRF保護
  • 歸納:跨站請求僞造,經過假裝成受權用戶去訪問攻擊網站的惡意漏洞。
  • lavavel自帶CSRF中間件,會自動爲應用受權保護的有效用戶會話建立一個CSRF令牌,並存在session中,用於驗證受權用戶和訪問用戶是不是同一我的。
控制器[MVC中的C]
  • 路由指向控制器[同理:其它請求方式作相應更改]
// http://localhost/testController
Route::get('testController', 'TestController@testController');
  • 路由取別名[能夠經過route('testInfo'),獲取路由地址]
Route::get('testController',[
    'uses' => 'TestController@testController',
    'as' => 'testInfo',
]);
  • 參數綁定
// [路由文件]http://localhost/testController/1
Route::get('testController/{id}',['uses' => 'TestController@testController']);
<?php
/**
 * Created by PhpStorm.
 * User: admin
 * Date: 2018/6/5
 * Time: 15:45
 */
namespace  App\Http\Controllers;

class  TestController extends  Controller
{
    // [控制器文件] TEST
    public function testController ($id)
    {
        return 'id-'.$id;
//        return route('testInfo');
//        phpinfo();
    }
}

// 參數驗證php

// http://localhost/testController/1
Route::get('testController/{id}',['uses' => 'TestController@testController'])
->where('id', '[0-9]');
視圖
  • 位置,resources/views
  • 建立新視圖時,按控制器名建立新文件夾
// 新建視圖文件testview.php,輸出testview php
// 控制器輸出 return view('testview');
  • 模板傳參
// controller文件
public function testController ($id)
    {
        return view('test/test',[
            'id' => $id
        ]);
    }
  • 視圖文件顯示
test/test blade
{{$id}}
模型
  • 位置 app根目錄
  • 模型文件
<?php
/**
 * Created by PhpStorm.
 * User: admin
 * Date: 2018/6/5
 * Time: 17:37
 */
namespace App;
use Illuminate\Database\Eloquent\Model;

class Test extends Model
{
    public static function getTestInfo () {
        return 'THIS IS A GOOD IDEA';
    }
}
  • controller 文件
public function testController ($id)
    {
        return Test::getTestInfo();
    }
數據鏈接
  • 文件位置 config/database.php vendor/.env
  • 連接數據庫
// 路由
Route::get('getUserInfo', ['uses' => 'userController@getUserInfo']);
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\DB;

class userController extends  Controller {
    public function getUserInfo ()
    {
        // 返回的bool值
        $res['res'] = DB::insert('insert into user(name,age) values(?,?)', ['name2',18]);
        // 返回影響行數
        $res['changeRes'] = DB::update('update user set age = ? where id = ?', [17,1]);
        $res['userData'] = DB::select('select * from user');
        // 返回刪除的行數
        <!--$res['userData'] = DB::delete('delete from user where id = ?', [5]);-->
        <!--return $res;-->
        // 格式化
        dd($res);
    }
}
// 輸出顯示
array:1 [▼
  "userData" => array:4 [▼
    0 => {#202 ▼
      +"id": 1
      +"name": "maomao"
      +"age": 17
    }
    1 => {#204 ▼
      +"id": 2
      +"name": "xinxin"
      +"age": 18
    }
    2 => {#205 ▼
      +"id": 3
      +"name": "name"
      +"age": 18
    }
    3 => {#206 ▼
      +"id": 4
      +"name": "name2"
      +"age": 18
    }
  ]
]
查詢構造器
// 查詢構造器  新增
    public function queryBuilder()
    {
        // 返回的bool值
        $res['bool'] = DB::table('user')->insert(
            ['name' => 'queryBuilder', 'age' => 19],
            ['name' => 'queryBuilder2', 'age' => 19]
        );
        // 獲取
        $res['id'] = DB::table('user')->insertGetId(
            ['name' => 'queryBuilder', 'age' => 19]
        );
        var_dump($res);
    }

    // 查詢構造器 更新
    public function queryBuilder2()
    {
        // 返回的影響行數
        $res['num'] = DB::table('user')
            ->where('id', 1)
            ->update(
            ['name' => 'queryBuilderMao', 'age' => 19]
        );
        // 更新自增
        $res['incrementNum'] = DB::table('user')
            ->where('id', 1)
            ->increment('age',1);
        // 更新自減
        $res['decrementNum'] = DB::table('user')
            ->where('id', 1)
            ->decrement('age',1);
        // 更新自增自減時修改其它條件信息
        $res['decrementNum'] = DB::table('user')
            ->where('id', 1)
            ->decrement('age',1,['name' => 'lala']);
        var_dump($res);
    }

    // 查詢構造器 刪除
    public function queryBuilder3()
    {
        // 返回的影響行數
        $res['deleteNum'] = DB::table('user')
            ->where('id', 6)
            ->delete();
        // 區間條件刪除
        $res['deleteNum2'] = DB::table('user')
            ->where('id','>=', 5)
            ->get();
        // 清除表信息
        $res['truncateNum'] = DB::table('user')
            ->truncate();
        var_dump($res);
    }

    // 查詢構造器 查詢
    public function queryBuilder4()
    {
        // 第一條
        $res['frist'] = DB::table('user')
            ->orderBy('id', 'desc')
            ->frist();
        // 所有
        $res['user'] = DB::table('user')
            ->get();
        // 清除表信息
        $res['truncateNum'] = DB::table('user')
            ->truncate();
        var_dump($res);
    }
ORM
  • 簡介聽說時一個優美的activeRecord實現,用來實現數據庫的操做
  • 每一個數據表對應一個model,用來和數據表的數據交互
<?php
namespace App\Http\Controllers;

use App\Student;

class StudentController extends  Controller
{
    public  function orm()
    {
        // 查詢 all()
        $student = Student::all();
        dd($student);

        // find() 一條
        $findData = Student::find(2);
        dd($findData);

        // findOrFail() 根據逐漸查找,沒有則拋出異常
        $findData = Student::findOrFa (3);
        dd($findData);

        // 查詢第一條
        $findData = Student::where('id','>', '1')
                    ->orderBy('id', 'desc')
                    ->first();
        dd($findData);

        // 分組
        echo '<pre>';
        Student::chunk(1,function ($students)
        {
         var_dump($students);
        });

        // 聚合函數(count, max, min, avg)
        $num = Student::count();
    }

    // 使用模型新增數據
    public function orm1()
    {
        // student模型對象
        $student = new Student();
        $student ->name = 'name133';
        $student ->age = 12;
        $bool = $student->save();
        dd($bool);

        $student = Student::find(5);
        echo date('Y-m-d H:i:s', $student->created_at);

        // 使用模型的Create方法新增數據
        $addRes = Student::create(
            ['name'=>'llll','age'=>12]
        );

        // 使用模型的firstOrCreate方法新增數據
        $addRes = Student::firstOrCreate(
            ['name'=>'lll','age'=>12]
        );

        // 使用模型的firstOrNew方法新增數據,經過屬性查詢用戶沒有則創建新的實例
        $student = Student::firstOrNew(
            ['name'=>'ll','age'=>12]
        );
        // 須要保存則自行調用save
        $addRes = $student->save();
        dd($addRes);
    }

    // 更新
    public function orm2()
    {
        // 返回更新行數
        $num = Student::where('id','>',2)
                ->update(['name'=> 'sb']);
        var_dump($num);
    }

    // 刪除
    public function orm3() {
        $students = Student::find(1);
        $bool = $students->delete();

        // 經過主鍵刪除
        $num = Student::destroy(1);

        $num2 = Student::where('id', '<',12)
                        ->delete();

    }
}
相關文章
相關標籤/搜索