laravel 5.6入門

第一章:laravel安裝

安裝方法一:homestead 虛擬機php

安裝方法二:composer安裝
環境要求css

PHP >= 7.1.3
OpenSSL PHP Extension
PDO PHP Extension
Mbstring PHP Extension
Tokenizer PHP Extension
XML PHP Extension
Ctype PHP Extension
JSON PHP Extension
  • 首先:安裝composer 修改成中國鏡像
  • 其次:composer安裝框架html

    1. 第一種:laravel安裝器:
      1. composer global require "laravel/installer"
      2. 進入到項目目錄執行 laravel new xxxproject
    2. 第二種:直接建立目錄:執行 composer create-project --prefer-dist laravel/laravel xxxproject
  • 最後,修改nginx配置
    1. 首先,配置根目錄到項目目錄的public下
    2. 其次,添加以下代碼:
      location / {
      try_files $uri $uri/ /index.php?$query_string;
      }

第二章:laravel目錄結構介紹

目錄介紹:mysql

app                //應用目錄 代碼基本都在這裏寫
bootstrap          //框架啓動文件 路由緩存目錄
config             //框架的配置目錄
database           //數據庫目錄 數據遷移以及種子
public             //框架入口文件 以及靜態文件
resources          //資源目錄 視圖文件未編譯的jscss
routes             //路由目錄
storage            //存儲目錄  編譯模板 日誌等。。
tests              //測試文件
vendor             //composer依賴包 
.env               //環境配置文件
artisan            //命令行使用文件

第三章:laravel路由

  • 基本路由 Route:構建最基本的路由只須要一個 URI 與一個 閉包
    Route::get('foo', function () {});nginx

    1. 默認路由文件
      Route::get('/user', 'UserController@index');
    2. 可用的路由方法
      路由器容許你註冊能響應任何 HTTP 請求的路由:請求方式包含[get/post/put/delete/patch/options];
      有的時候你可能須要註冊一個可響應多個 HTTP 請求的路由,這時你可使用 match 方法,也可使用 any方法註冊一個實現響應全部 HTTP 請求的路由規則:
      Route::match(['get', 'post'], '/', $callback);
      Route::any('foo', $callback);
    3. CSRF 保護
      指向 web 路由文件中定義的 POST、PUT 或 DELETE 路由的任何 HTML 表都應該包含一個 CSRF 令牌字段,不然,這個請求將會被拒絕。
      <form method="POST" action="/profile">
      @csrf //或 {{ csrf_field() }} {{ method_field(方法名)}} 
      </form>

      取消csrf保護:app/Http/Middleware/VerifyCsrfToken.php
      protected $except = ['your/route'];laravel

    4. redirect() 重定向路由:
      Route::redirect('/here', '/there', 301);
    5. view() 視圖路由
      其中前兩個是必填參數,分別是 URI 和視圖名稱。第三個參數選填,能夠傳入一個數組,數組中的數據會被傳遞給視圖:
      Route::view('/welcome', 'welcome', ['name' =&gt; 'Taylor']);
  • 路由參數:web

    1. 必填參數:
      Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {});
    2. 可選參數:
      Route::get('user/{nane?}',function($name='123'){});
    3. 過濾參數正則:
      Route::get('user/{ids?}',function($ids){        
      return $ids;
      })->where(‘ids’,‘[a-z]+’);  //多個參數過濾 後面加數組
    4. 全局約束:
      某個具體的路由參數都遵循同一個正則表達式的約束,就使用 pattern 方法在 RouteServiceProvider 的 boot 方法中定義這些模式:
      public function boot(){
      Route::pattern('id', '[0-9]+');
      parent::boot();
      }

      一旦定義好以後,便會自動應用這些規則到全部使用該參數名稱的路由上正則表達式

  • 路由命名:
    路由指定了名稱後,就可使用全局輔助函數 route 來生成連接或者重定向到該路由:sql

    Route::get('user/{id}/profile', function ($id) {})->name('profile');
    $url = route('profile', ['id' => 1]);// 生成 URL...
    return redirect()->route('profile'); // 生成重定向...
    1. 檢查當前路由:
      判斷當前請求是否指向了某個路由,你能夠調用路由實例上的 named 方法。例如,你能夠在路由中間件中檢查當前路由名稱:
      /**
      *處理一次請求。
      *@param  \Illuminate\Http\Request  $request
      *@param  \Closure  $next
      *@return mixed
      */
      public function handle($request, Closure $next){
      if ($request->route()->named('profile')) {}
      return $next($request);
      }
  • 路由組
    路由組容許你在大量路由之間共享路由屬性,例如中間件或命名空間,而不須要爲每一個路由單獨定義這些屬性。共享屬性應該以數組的形式傳入 Route::group 方法的第一個參數中。
    1. 中間件
      要給路由組中全部的路由分配中間件,能夠在 group 以前調用 middleware 方法,中間件會依照它們在數組中列出的順序來運行:
      Route::middleware(['first', 'second'])->group(function () {
      // 一下兩個路由均使用 first 和 second 中間件
      Route::get('/', function () {});
      Route::get('user/profile', function () {});
      });
    2. 命名空間
      另外一個常見用例是使用 namespace 方法將相同的 PHP 命名空間分配給路由組的中全部的控制器:
      Route::namespace('Admin')->group(function () {
      // 在 "App\Http\Controllers\Admin" 命名空間下的控制器
      });

      請記住,默認狀況下,RouteServiceProvider 會在命名空間組中引入你的路由文件,讓你不用指定完整的 App\Http\Controllers 命名空間前綴就能註冊控制器路由。所以,你只須要指定命名空間 App\Http\Controllers 以後的部分。數據庫

    3. 子域名路由
      路由組也能夠用來處理子域名。子域名能夠像路由 URI 同樣被分配路由參數,容許你獲取一部分子域名做爲參數給路由或控制器使用。能夠在 group 以前調用 domain 方法來指定子域名:
      Route::domain('{account}.myapp.com')->group(function () {
      Route::get('user/{id}', function ($account, $id) {});
      });
    4. 路由前綴
      能夠用 prefix 方法爲路由組中給定的 URL 增長前綴。例如,你能夠爲組中全部路由的 URI 加上 admin 前綴:
      Route::prefix('admin')->group(function () {
      // 匹配包含 "/admin/users" 的 URL
      Route::get('users', function () {});
      });
    5. 路由名稱前綴
      name 方法能夠用來給路由組中的每一個路由名稱添加一個給定的字符串。 例如,您可能但願以 「admin」爲全部分組路由的名稱加前綴。 給定的字符串與指定的路由名稱前綴徹底相同,所以咱們將確保在前綴中提供尾部的 . 字符:
      Route::name('admin.')->group(function () {
      // Route assigned name "admin.users"...
      Route::get('users', function () {})->name('users');
      });
  • 路由模型綁定
    當向路由或控制器行爲注入模型 ID 時,就須要查詢這個 ID 對應的模型。Laravel 爲路由模型綁定提供了一個直接自動將模型實例注入到路由中的方法。例如,你能夠注入與給定 ID 匹配的整個 User 模型實例,而不是注入用戶的 ID。
    1. 隱式綁定
      在以下這個例子中,因爲 $user 變量被類型提示爲 Eloquent 模型 App\User,變量名稱又與 URI 中的 {user} 匹配,所以,Laravel 會自動注入與請求 URI 中傳入的 ID 匹配的用戶模型實例。若是在數據庫中找不到對應的模型實例,將會自動生成 404 異常。
      Route::get('api/users/{user}', function (App\User $user) {
      return $user->email;
      });
    2. 自定義鍵名
      若是你想要模型綁定在檢索給定的模型類時使用除 id 以外的數據庫字段,你能夠在 Eloquent 模型上重寫 getRouteKeyName 方法:
      /**
      *獲取該模型的路由的自定義鍵名。
      *@return string
      */
      public function getRouteKeyName(){
      return 'slug';
      }
    3. 顯式綁定
      要註冊顯式綁定,使用路由器的 model 方法來爲給定參數指定類。在 RouteServiceProvider 類中的 boot方法內定義這些顯式模型綁定:
      public function boot(){
      parent::boot();
      Route::model('user', App\User::class);
      }

      接着,定義一個包含 {user} 參數的路由:
      Route::get('profile/{user}', function (App\User $user) {});

  • 回退路由
    使用 Route::fallback 方法,你能夠定義在沒有其餘路由匹配傳入請求時執行的路由。一般,未處理的請求會經過應用程序的異常處理程序自動呈現 「404」 頁面。可是,由於你能夠在 routes/web.php 文件中定義 fallback 路由,web 中間件的全部中間件都將應用到路由中。固然,你也能夠根據須要向這條路由中添加額外的中間件:Route::fallback(function () {});
  • 訪問控制
    Laravel 包含了一個 中間件 用於控制應用程序對路由的訪問。若是想要使用,請將 throttle 中間件分配給一個路由或一個路由組。throttle 中間件會接收兩個參數,這兩個參數決定了在給定的分鐘數內能夠進行的最大請求數。 例如,讓咱們指定一個通過身份驗證而且用戶每分鐘訪問頻率不超過 60 次的路由:
    Route::middleware('auth:api', 'throttle:60,1')->group(function () {
    Route::get('/user', function () {});
    });
    1. 動態訪問控制
      你能夠根據已驗證的 User 模型的屬性指定動態請求的最大值。 例如,若是你的 User 模型包含rate_limit屬性,則能夠將屬性名稱傳遞給 throttle 中間件,以便它用於計算最大請求計數:
      Route::middleware('auth:api', 'throttle:rate_limit,1')->group(function () {
      Route::get('/user', function () {});
      });
  • 表單方法僞造
    HTML 表單不支持 PUT、PATCH 或 DELETE 行爲。因此當你要從 HTML 表單中調用定義了 PUT、PATCH 或 DELETE 路由時,你將須要在表單中增長隱藏的 _method 輸入標籤。使用 _method 字段的值做爲 HTTP 的請求方法:
    <form action="/foo/bar" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token()}}">
    </form>
    //你也可使用 @ method Blade 指令生成 _method 輸入:
    <form action="/foo/bar" method="POST">
    @method('PUT')
    @csrf
    </form>
  • 訪問當前路由
    你可使用 Route Facade 上的 current、currentRouteName 和 currentRouteAction 方法來訪問處理傳入請求的路由的信息:

    $route = Route::current();
    $name = Route::currentRouteName();
    $action = Route::currentRouteAction();

    若是你想知道全部可訪問的方法,能夠查看 API 文檔,瞭解 Route facade and Route 實例 的基礎類。

  • 路由緩存
    若是你的應用只使用了基於控制器的路由,那麼你應該利用路由緩存。 使用路由緩存將極大地減小注冊全部應用路由所需的時間。某些狀況下,路由註冊的速度甚至會快100倍。
    要生成路由緩存, 只須要執行 Artisan 命令 route:cache :php artisan route:cache
    你可使用 route:clear 命令清除路由緩存:php artisan route:clear

第四章:laravel 控制器

  • 控制器的定義 遵循規則
    1. 統一放在 app/Http/Controllers
    2. 命名空間 namespace App\Http\Controllers;
    3. 遵循PSR-4 類定義規範 文件名和類名同樣 首字母大寫
    4. 類名Controller.php 默認規則
    5. 能夠繼承 Controller.php 也能夠不繼承,推薦繼承。(控制器並 不是強制要求 繼承基礎類。可是,若是控制器沒有繼承基礎類,你將沒法使用一些便捷的功能,好比 middleware, validate 和 dispatch 方法。)
    6. 能夠 app/Http/Controllers 繼續建立目錄 目錄名首字母大寫
    7. 命名空間 namespace App\Http\Controllers\目錄名
  • 基礎控制器
    須要着重指出的是,在定義控制器路由時咱們不須要指定完整的控制器命名空間。由於 RouteServiceProvider會在一個包含命名空間的路由器組中加載路由文件,因此咱們只需指定類名中 App\Http\Controllers 命名空間以後的部分就能夠了

    1. 單個行爲控制器
      若是你想定義一個只處理單個行爲的控制器,你能夠在這個控制器中放置一個 __invoke方法,這樣在定義路有中就無需指明方法:
      class ShowProfile extends Controller{
      /**
      *展現給定用戶的資料
      *@param  int  $id
      *@return Response
      */
      public function __invoke($id){
      return view('user.profile', ['user' => User::findOrFail($id)]);
      }
      }

      定義路由:Route::get('user/{id}', 'ShowProfile');
      你能夠經過 Artisan 命令工具裏的make:controller命令中的--invokable 選項來生成一個可調用的控制器:php artisan make:controller ShowProfile --invokable

  • 控制器中間件

    1. Middleware 能夠在路由文件中被分配給控制器路由:
      Route::get('profile', 'UserController@show')-&gt;middleware('auth');
    2. 在控制器的構造方法中指定中間件會更方便。使用控制器構造函數中的 middleware 方法, 你能夠很容易地將中間件分配給控制器的行爲。你甚至能夠約束中間件只對控制器類中的某些特定方法生效:
      class UserController extends Controller{
      /**
      *實例化一個控制器實例
      *@return void
      */
      public function __construct(){
      $this->middleware('auth');
      $this->middleware('log')->only('index');
      $this->middleware('subscribed')->except('store');
      }
      }
    3. 還能使用閉包來爲控制器註冊中間件。閉包的方便之處在於,你無需特意建立一箇中間件類來爲某一個特殊的控制器註冊中間件
      $this->middleware(function ($request, $next) {
      return $next($request);
      });
  • 資源控制器
    Laravel 資源路由將典型的「CRUD」路由分配給具備單行代碼的控制器。好比,你但願建立一個控制器來處理應用保存的「照片」的全部 HTTP 請求。
    laravel 5.6入門
    1. 使用 Artisan 命令make:controller,咱們能夠快速建立這樣一個控制器:php artisan make:controller PhotoController --resource
    2. 給控制器註冊一個資源路由:Route::resource('photos', 'PhotoController');
    3. 註冊多個資源路由:
      Route::resources([
      'photos' => 'PhotoController',
      'posts' => 'PostController'
      ]);
    4. 資源控制器操做處理
    5. 指定資源模型:php artisan make:controller PhotoController --resource --model=Photo
    6. 部分資源路由
      Route::resource('photos', 'PhotoController')->only([
      'index', 'show'
      ]);
      Route::resource('photos', 'PhotoController')->except([
      'create', 'store', 'update', 'destroy'
      ]);
    7. API 資源路由
      當聲明用於 APIs 的資源路由時,一般須要排除顯示 HTML 模板的路由, 如 create 和 edit。 爲了方便起見,你可使用 apiResource 方法自動排除這兩個路由,而且aip資源路由,也包含資源路由組的功能.
      爲了快速生成一個不包含 create 和 edit 方法的 API 資源控制器,能夠在執行 make:controller 命令時加上 --api 選項:php artisan make:controller API/PhotoController --api
    8. 命名資源路由
      默認狀況下,全部的資源控制器行爲都有一個路由名稱。 可是,你能夠傳入一個 names 數組來覆蓋這些名稱:
      Route::resource('photos', 'PhotoController')->names([
      'create' => 'photos.build'
      ]);
    9. 命名資源路由參數
      默認狀況下, Route::resource 會根據資源名稱的「單數」形式建立資源路由的路由參數。 你能夠在選項數組中傳入 parameters參數來輕鬆地覆蓋每一個資源。 parameters 數組應當是一個資源名稱和參數名稱的關聯數組:
      Route::resource('users', 'AdminUserController')->parameters(['users' => 'admin_user']);

      上例將會爲資源的 show 路由生成以下的 URI :/users/{admin_user}

    10. 本地化資源 URIs
      默認狀況下,Route::resource 將會使用英文動詞來建立資源 URI。若是你須要本地化 create 和 edit 行爲動做名,你能夠在AppServiceProvider 的 boot 方法中使用 Route::resourceVerbs 方法實現 :
      use Illuminate\Support\Facades\Route;
      /**
      *初始化任何應用服務
      *@return void
      */
      public function boot(){
      Route::resourceVerbs([
      'create' => 'crear',
      'edit' => 'editar',
      ]);
      }

      一旦動做被自定義後,像 Route::resource('fotos', 'PhotoController') 這樣註冊的資源路由將會產生以下的 URI:

      /fotos/crear
      /fotos/{foto}/editar
    11. 補充資源控制器
      若是你須要爲資源控制器添加默認路由以外的額外路由,你應該在調用 Route::resource 以前定義這些路由;不然, 由 resource 方法定義的路由可能會無心中優先於你補充的路由 :
      Route::get('photos/popular', 'PhotoController@method');
      Route::resource('photos', 'PhotoController');
  • 依賴注入 & 控制器
    1. 構造函數注入
      Laravel使用 服務容器 解析全部的控制器。所以,你能夠在控制器的構造函數中使用類型提示可能須要的依賴項。依賴聲明會被自動解析並注入到控制器實例
      <?php
      namespace App\Http\Controllers;
      use App\Repositories\UserRepository;
      class UserController extends Controller{
      /**
      *用戶 repository 實例 ???
      */
      protected $users;
      /**
      *建立一個新的控制器實例
      *@param  UserRepository  $users
      *@return void
      */
      public function __construct(UserRepository $users){
      $this->users = $users;
      }
      }

      固然,你能夠輸入任何的 Laravel 契約 類型提示。 只要容器能夠解析它。根據你的應用,注入你的類型提示到控制器會提供更好可測試性。

    2. 方法注入
      方法注入最多見的用例是在控制器方法中注入 Illuminate\Http\Request 的實例 :
      <?php
      namespace App\Http\Controllers;
      use Illuminate\Http\Request;
      class UserController extends Controller{
      /**
      *保存新用戶
      *@param  Request  $request
      *@return Response
      */
      public function store(Request $request){
       $name = $request->name;
      }
      }

第六章 HTTP請求

  • 獲取請求
    要經過依賴注入的方式來獲取當前 HTTP 請求的實例,你應該在控制器方法中引入 Illuminate\Http\Request類。傳入的請求實例將經過 服務容器 自動注入:
    1. 依賴注入 & 路由參數【控制器中引入 Illuminate\Http\Request】
    2. 經過路由閉包獲取請求【路由中引入 Illuminate\Http\Request】
      use Illuminate\Http\Request;
      Route::get('/', function (Request $request) {});
    3. Illuminate\Http\Request的方法
      ip()  獲取訪問者ip 地址  //  dd() 打印數據 並退出 
      userAgent()  獲取訪問者代理
      route()   獲取路由請求的詳情
      header()  獲取請求頭信息
      url()  獲取請求地址 不包括查詢字符串
      fullUrl()  獲取請求地址 包括查詢字符串
      path()  獲取請求路徑
      is() 方法能夠驗證傳入的請求路徑和指定規則是否匹配。
      method()  獲取請求的方法
      isMethod(方法名)  判斷請求方法
      merge(數組)  合併新的數據到請求數據中
      replace(數組) 替換請求數據
      keys()  獲取全部的name
      has(name) 判斷是否傳過來值,當提供一個數組做爲參數時,has 方法將肯定是否存在數組中全部給定的值:
      filled('name') //肯定請求中是否存在值而且不爲空
      file()  獲取文件的信息
      all() 獲取全部發送的數據
      input(name,默認值) 獲取get/post發送的數據  //不帶參數 獲取全部
      query(name,默認值) 從查詢字符串獲取輸入 不加任何參數 獲取全部的
      only(數組) 獲取指定的name
      except(數組) 不獲取指定的name
  • 輸入預處理 & 規範化
  • 獲取輸入
    1. 經過動態屬性獲取輸入
      經過 Illuminate\Http\Request 實例的動態屬性來獲取用戶輸入。例如,若是你應用的表單中包含 name 字段,那麼能夠像這樣訪問該字段的值:$name = $request-&gt;name;
    2. 獲取 JSON 輸入信息
      若是發送到應用程序的請求數據是 JSON,只要請求的 Content-Type 標頭正確設置爲 application/json,就能夠經過 input 方法訪問 JSON 數據。你甚至可使用 「點」式語法來讀取 JSON 數組:
    3. 舊輸入
      Laravel 容許你將本次請求的數據保留到下一次請求發送前。若是第一次請求的表單不能經過驗證,就可使用這個功能從新填充表單。可是,若是你使用了 Laravel 的 驗證功能,你就不須要在手動實現這些方法,由於 Laravel 內置的驗證工具會自動調用他們。
    4. 獲取舊輸入
      若要獲取上一次請求中閃存的輸入,則可使用 Request 實例中的 old 方法。old 方法會從 Session 取出以前被閃存的輸入數據:$username = $request-&gt;old('username');
      Laravel 也提供了全局輔助函數 old。若是你要在 Blade 模板 中顯示舊的輸入,使用 old 會更加方便。若是給定字段沒有舊的輸入,則返回 null:&lt;input type="text" name="username" value="{{ old('username') }}"&gt;
    5. Session
      $request->session()->put('key', 'value’);    //存
      $request->session()->get('key', 'default’);  //取
      $request->session()->has('users’);           //判斷
      $request->session()->forget('key') && $request->session()->flush();//刪除
      flash();      //將輸入閃存至 Session
      flashOnly();  //將輸入閃存至 Session
      flashExcept();//將輸入閃存至 Session
      return redirect('form')->withInput(
      $request->except('password')
      );//把輸入閃存到 session 而後重定向到上一頁,這時只須要在重定向方法後加上 withInput 便可
    6. Cookies
    7. 從請求中獲取 Cookies: $request-&gt;cookie('name'); 或使用 Cookie Facade 來訪問 cookie 的值: $value = Cookie::get('name');()
    8. 將 Cookies 附加到響應
      response('Hello World')-&gt;cookie('name', 'value', $minutes[, $path, $domain, $secure, $httpOnly]);
      或者可使用 Cookie Facade 來 queue Cookie,以將其與應用程序的傳出響應鏈接起來。queue 方法接受 Cookie 實例或建立 Cookie 實例所需的參數。在發送到瀏覽器以前,這些 cookie 將被附加到輸出響應:
      Cookie::queue(Cookie::make('name', 'value', $minutes));
      Cookie::queue('name', 'value', $minutes);
    9. 生成 Cookie 實例
      若是你想要在一段時間之後生成一個能夠給定 Symfony\Component\HttpFoundation\Cookie 的響應實例,你可使用全局輔助函數 cookie。除非此 cookie 被附加到響應實例,不然不會發送回客戶端:
      $cookie = cookie('name', 'value', $minutes);
      return response('Hello World')->cookie($cookie);
    10. 文件
      file() ;//獲取上傳文件,該file方法返回一個Illuminate\Http\UploadedFile類的實例,該類繼承了PHP的SplFileInfo 類的同時也提供了各類與文件交互的方法:
      hasFile() //確認請求中是否存在文件:
      isValid() /驗證上傳的文件是否有效:
      $request->photo->path();     //文件路徑 
      $request->photo->extension();//根據文件內容判斷文件的實際擴展名
      //其它文件方法:UploadedFile 實例上還有許多可用的方法,能夠查看該類的 API 文檔 瞭解這些方法的詳細信息。
      //存儲上傳文件
      $request->photo->store('images'[, 's3']);//第二個參數,用於存儲文件的磁盤名稱。這個方法會返回相對於磁盤根目錄的文件路徑;`
      $request->photo->storeAs('images', 'filename.jpg'[, 's3']);//若是你不想自動生成文件名,那麼可使用 storeAs 方法,它接受路徑、文件名和磁盤名做爲其參數:

第七章 HTTP響應

  • 建立響應
    1. 爲響應增長響應頭信息
      return response($content)
         ->header('Content-Type', $type)
         ->header('X-Header-One', 'Header Value')
         ->header('X-Header-Two', 'Header Value');
      //或者,你可使用 withHeaders 方法來指定要添加到響應的頭信息數組:
      return response($content)
          ->withHeaders([
              'Content-Type' => $type,
              'X-Header-One' => 'Header Value',
              'X-Header-Two' => 'Header Value']);
    2. 爲響應增長coolie
      return response($content)
              ->header('Content-Type', $type)
              ->cookie($name, $value, $minutes[, $path, $domain, $secure, $httpOnly])
      //或者,使用 Cookie facade 「隊列」, Cookie 以附加到應用程序的傳出響應。 queue 方法接受一個 Cookie 實例或建立 Cookie 實例所需的參數。 這些 cookie 在發送到瀏覽器以前會附加到傳出響應中:
      Cookie::queue(Cookie::make('name', 'value', $minutes));
      Cookie::queue('name', 'value', $minutes);
    3. Cookie & 加密
      默認狀況下,Laravel 生成的全部 Cookie 都是通過加密和簽名,所以不能被客戶端修改或讀取。 若是你想要應用程序生成的部分 Cookie 不被加密,那麼可使用在 app/Http/Middleware 目錄中 App\Http\Middleware\EncryptCookies 中間件的 $except 屬性:
      /**
      *設置不加密的 Cookie 名稱,數組形式
      *@var array
      */
      protected $except = [
      'cookie_name',
      ];
  • 重定向
    重定向響應是 Illuminate\Http\RedirectResponse 類的實例 助手函數redirect()
    back()->withInput() //重定向到以前位置
    redirect()->route('profile', ['id' => 1]) //重定向至命名路由
    redirect()->action('UserController@profile', ['id' => 1]); //重定向至控制器行爲
    redirect()->away('https://www.google.com'); //重定向到外部域
    redirect('dashboard')->with('status', 'Profile updated!');重定向並使用with方法將數據閃存在 Session 中,
    redirect()->route('profile', [$user]); //經過 Eloquent 模型填充參數

    若是要自定義路由參數中的值,那麼應該覆蓋 Eloquent 模型裏面的 getRouteKey 方法:

    /**
    *獲取模型的路由鍵
    *@return mixed
    */
    public function getRouteKey(){
    return $this->slug;
    }
  • 其餘響應類型
    使用輔助函數 response 能夠用來生成其餘類型的響應實例。當不帶參數調用輔助函數 response 時,會返回 Illuminate\Contracts\Routing\ResponseFactory 契約 的實例。 契約提供了幾種輔助生成響應的方法。
    1. 視圖響應
      return response()
           ->view('hello', $data, 200)
           ->header('Content-Type', $type);
    2. JSON響應
      return response()
      ->json(['name' => 'Abigail', 'state' => 'CA'])
      [->withCallback($request->input('callback'))];
    3. 文件下載
      return response()->download($pathToFile);
      return response()->download($pathToFile, $name, $headers);//download 方法的第二個參數接受一個文件名,它將做爲用戶下載的時所看見的文件名。最後,你能夠傳遞一個 HTTP 響應頭數組做爲該方法的第三個參數
      return response()->download($pathToFile)->deleteFileAfterSend(true);

      管理文件下載的擴展包 Symfony HttpFoundation,要求下載文件名必須是 ASCII 編碼的。

    4. 流式下載
    5. File 響應(file 方法能夠直接在用戶瀏覽器中顯示文件(不是發起下載),例如圖像或者 PDF)
      return response()->file($pathToFile[, $headers]);//此方法接受文件的路徑做爲其第一個參數和頭信息數組做爲其第二個參數:
    6. 響應宏

第八章 Cookie

引入 Cookie :use Illuminate\Support\Facades\Cookie;

// 寫入 cookie
$cookie = Cookie::make($key,$value,$minutest); //建立一個cookie實例
Cookie::queue($cookie ); //將新的實例加入到隊列
// 獲取 cookie
Cookie::get($key) 
// 刪除 cookie
$user = Cookie::forget('username');
Cookie::queue($user); //將新的實例加入到隊列
// 判斷 cookie 是否存在
Cookie::has('username');

默認狀況下,Laravel 生成的全部 Cookie 都是通過加密和簽名,所以不能被客戶端修改或讀取。 若是你想要應用程序生成的部分 Cookie 不被加密,那麼可使用在 app/Http/Middleware 目錄中 App\Http\Middleware\EncryptCookies 中間件的 $except 屬性:

protected $except = [
    'cookie_name',
];

助手函數

cookie([‘ag’=>33]); // 存儲,必須傳數組形式
cookie('ag’); // 獲取

第九章 Session

引入 use Illuminate\Support\Facades\Session;

// 存儲 session
Session::put(‘name’,‘liudehua’);  //裏面也能夠用數組形式
// 獲取
Session::get(‘name’)
// 刪除
Session::forget('name’);
// 清空全部session
Session::flush();
// 判斷是否存在session
Session::has('key1’)

助手函數

session([‘ag’=>33]); // 存儲,必須傳數組形式
session('ag’); // 獲取

第十章 視圖

Blade 是 Laravel 提供的一個簡單而又強大的模板引擎。和其餘流行的 PHP 模板引擎不一樣,Blade 並不限制你在視圖中使用原生 PHP 代碼。全部 Blade 視圖文件都將被編譯成原生的 PHP 代碼並緩存起來,除非它被修改,不然不會從新編譯,這就意味着 Blade 基本上不會給你的應用增長任何負擔。

  1. 定義規則:
    1. 存放在 resources/views 目錄。
    2. Blade 視圖文件使用 .blade.php 做爲文件擴展名
  2. 模板引擎展現
    view(‘index’) => index.blade.php
    view(‘user.index’) => user/index.blade.php
  3. 判斷視圖文件是否存在
    若是須要判斷視圖文件是否存在,可使用 View Facade 上的 exists 方法。若是視圖文件存在,該方法會返回 true :
    use Illuminate\Support\Facades\View;
    if (View::exists('emails.customer')) {}
  4. 建立第一個可用視圖
    使用 first 方法,你能夠建立存在於給定數組視圖中的第一個視圖。 若是你的應用程序或開發的第三方包容許定製或覆蓋視圖,這很是有用:return view()-&gt;first(['custom.admin', 'admin'], $data);
    固然,你也能夠經過 View facade 調用這個方法:
    use Illuminate\Support\Facades\View;
    return View::first(['custom.admin', 'admin'], $data);
  5. 傳數據到視圖
    view(‘index’,[‘name’=>’liudehua’]) 或 view('index‘)->with('age',33)
  6. 與全部視圖共享數據
    若是須要共享一段數據給應用程序的全部視圖,你能夠在服務提供器的 boot 方法中調用視圖 Facade 的 share 方法。例如,能夠將它們添加到 AppServiceProvider 或者爲它們生成一個單獨的服務提供器:

    <?php
    namespace App\Providers;
    use Illuminate\Support\Facades\View;
    
    class AppServiceProvider extends ServiceProvider{
     /**
      *引導任何應用程序服務。
      *@return void
      */
     public function boot(){
         View::share('key', 'value');
     }
    
     /**
      *註冊服務提供商。
      *@return void
      */
     public function register(){}
    }
  7. 視圖合成器
    視圖合成器是在渲染視圖時調用的回調或者類方法。若是你每次渲染視圖時都要綁定視圖的數據,視圖合成器能夠幫你將這些邏輯整理到特定的位置。

    <?php
    namespace App\Providers;
    use Illuminate\Support\Facades\View;
    use Illuminate\Support\ServiceProvider;
    //在下面這個例子中,咱們會在一個 服務提供商 中註冊視圖合成器,使用 View Facade 來訪問底層的 Illuminate\Contracts\View\Factory 契約實現。默認狀況下,Laravel 沒有存放視圖合成器的目錄,你須要根據需求來從新創建目錄,例如:App\Http\ViewComposers
    class ComposerServiceProvider extends ServiceProvider{
    /**
     *在容器中註冊綁定。
     *@return void
     */
    public function boot(){
        // 使用基於類的 composer...
        View::composer(
            'profile', 'App\Http\ViewComposers\ProfileComposer'
        );
        // 使用基於閉包的 composers...
        View::composer('dashboard', function ($view) {});
    }
    
    /**
     *註冊服務器提供者。
     *@return void
     */
    public function register(){}
    }

    注意,若是你建立了新的一個服務提供器來存放你註冊視圖合成器的代碼,那麼你須要將這個服務提供器添加到配置文件 config/app.php 的 providers 數組中。

到此咱們已經註冊了視圖合成器,每次渲染 profile 視圖時都會執行 ProfileComposer@compose 方法。那麼下面咱們來定義視圖合成器的這個類吧:

<?php
namespace App\Http\ViewComposers;
use Illuminate\View\View;
use App\Repositories\UserRepository;

class ProfileComposer{
    /**
     *用戶 repository 實現。
     *@var UserRepository
     */
    protected $users;
    /**
     *建立一個新的 profile composer。
     *@param  UserRepository  $users
     *@return void
     */
    public function __construct(UserRepository $users){
        // 依賴關係由服務容器自動解析...
        $this->users = $users;
    }
    /**
     *將數據綁定到視圖。
     *@param  View  $view
     *@return void
     */
    public function compose(View $view){
        $view->with('count', $this->users->count());
    }
}

視圖合成器的 compose方法會在視圖渲染以前被調用,並傳入一個 Illuminate\View\View 實例。你可使用 with 方法將數據綁定到視圖。

  • 將視圖構造器添加到多個視圖
    經過將一組視圖做爲第一個參數傳入 composer 方法,將一個視圖合成器添加到多個視圖:
    View::composer(
    ['profile', 'dashboard'],
    'App\Http\ViewComposers\MyViewComposer'
    );

    composer 方法同時也接受通配符 ,表示將一個視圖合成器添加到全部視圖:
    `View::composer('
    ', function ($view) {});`

  • 視圖構造器
    視圖 構造器 和視圖合成器很是類似。惟一不一樣之處在於:視圖構造器在視圖實例化以後當即執行,而視圖合成器在視圖即將渲染時執行。使用 creator 方法註冊視圖構造器:
    View::creator('profile', 'App\Http\ViewCreators\ProfileCreator');

第十一章 Blade 模板引擎

  1. 模板變量輸出(模板內部能夠直接使用php函數處理) {{變量名}}
  2. Blade {{}} 聲明中的內容是自動經過 PHP 的 htmlentities 方法過濾的,用來防止 XSS ***.不對變量進行過濾 {!! 變量名 !!}
  3. 原樣輸出 @{{ name }}, 因爲許多 JavaScript 框架也是用花括號來表示要顯示在瀏覽器的表達式, 可使用 @ 符告訴 Blade 渲染引擎保持這個表達式不變
  4. 註釋 {{-- 此註釋將不會出如今渲染後的 HTML --}}
  5. 流程控制

    if語句: @if-@elseif-@else-@endif 指令構建
    isset: @isset-@endisset `<p>{{ $name or ‘default’ }}</p>  //短語法`
    switch: @switch、@case、@break、@default 和 @endswitch 
    for循環 :@for-@endfor, @continue($i==5),@break($i==7)
    foreach 循環:@foreach-@endforeach 
    $loop 變量
    純PHP代碼: @php-@endphp

    $loop 變量
    laravel 5.6入門

  6. 模板繼承和佈局
    @section 命令定義了視圖的一部份內容
    @show
    @extends
    @yield('content') 用來顯示指定部分的內容。

    例1:master.blade.php

    <!DOCTYPE html>
    <html>
     <head>
         <meta charset="utf-8" >
         <title> @yield('title') </title>
     <head>
     <body>
         @section('left')
         這是left側邊欄。
         @show
         @section('right')
         這是right的側邊欄。
         @show
         <div>
         @yield('content')
         </div>
     </body>
    </html>

    例2:index.blade.php

    @extends('layout.master')
    @section('title','這是個首頁')
    @section('left’)
    @parent  
    我是左邊的
    @endsection   
    @section('right')
    我是右邊的
    @endsection   
    @section('content')
    <p>第一篇文章</p>
    <p>第二篇文章</p>
    @endsection
  7. 引入子視圖
    @include('layout.header’);

    視圖數據共享

    app/Providers/AppServiceProvider.php      boot方法
    use Illuminate\Support\Facades\View;
    View::share('username','liudehua');
  8. 引入js/css資源
    直接放到 public 文件加下面,引入 的話 就是從 public下面開始
    <script src="/js/jQuery.min.js"></script>

第十二章 Laravel 數據庫

Laravel 能使用原生 SQL、查詢構造器 和 Eloquent ORM 對數據庫進行操做
目前laravel支持 下面4種數據庫:MySQL/Postgres/SQLiteSQL/Server

  1. 配置數據庫鏈接(配置文件放置在 config/database.php 文件和.env)
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=test
    DB_USERNAME=root
    DB_PASSWORD=123456
    'charset' => 'utf8',       
    'collation' => 'utf8_general_ci',
  2. 原生sql語句操做
    DB Facade 運行查詢。 DB Facade 爲每種類型的查詢提供了方法: select 、 update 、 insert 、 delete 和 statement。
    引入 use Illuminate\Support\Facades\DB;
    // 插入數據  返回 true  或者false
    DB::insert('insert into test (name,age) values (?,?)',['liming',23]);
    // 更新數據   返回影響的行數
    DB::update('update test set age=? where id=?',[55,1]);
    // 查詢  數據返回一個數組,數組中的每一個結果都是一個 StdClass 對象
    DB::select('select name,age from test where id=?',[2]);
    // 刪除  返回影響的行數
    DB::delete('delete from test where id=?',[1]);
  3. 查詢構造器
    //1. 插入
    //table 方法爲給定的表返回一個查詢構造器實例
    DB::table('test')->insert(['name'=>'liudehua']); //插入一條數據,返回true、false
    DB::table('test')->insertGetId(['name'=>'liudehua']);//獲取插入數據的id
    批量插入二維數組ååååå
    //2. 更新數據
    $res = DB::åtable('test')->where('id',5)->update(['age'=>33]);
    //多條件
    $res = DB::table('test')->where(['id'=>7,'name'=>'liudehua'])->update(['age'=>33]);
    $res = DB::table('test')->where('id','>',5)->update(['age'=>99]);
    //自增  默認爲自增 1
    $res = DB::table('test')->where('id',4)->increment('age’);
    //自增 3
    $res = DB::table('test')->where('id',4)->increment('age',3);
    //自減 默認爲 1
    $res = DB::table('test')->where('id',4)->decrement(‘age’);
    //自減  3
    $res = DB::table('test')->where('id',4)->decrement('age',3);
    //3. 刪除
    $res = DB::table('test')->where('id',5)->delete();
    //4. 獲取數據 :toArray() ,結果集轉數組
    $res = DB::table('test')->get();//獲取多條數據  
    //獲取一條數據 不加條件默認獲取 第一條
    $res = DB::table('test')->first();
    //獲取某個字段的值
    $res = DB::table('test')->where('id',3)->value('age’);
    //獲取一列的值
    $res = DB::table('test')->pluck('age’);
    //獲取指定字段的值
    $res = DB::table('test')->select('name','age')->get();
    //5. 聚合函數: count, max, min, avg, 和 sum
    $res = DB::table('test')->sum('age’);
    $res = DB::table('test')->avg('age’);
    $res = DB::table('test')->min('age’);
    $res = DB::table('test')->max('age’);
    $res = DB::table('test')->count();
    //6. sql組合語句:
    //where('列名‘[,'運算符’,‘比較值’])
    //whereBetween  whereNotBetween  whereIn / whereNotIn
    $res = DB::table('test')->whereBetween('id',[4,7])->get();
    $res = DB::table('test')->whereIn('id',[4,7])->get();
    //or 語句[orWhere 方法接受與 where 方法相同的參]
     $res = DB::table('test')->where('id','3')->orWhere('age',23)->get();
    //orderBy
     $res = DB::table('test')->orderBy('id','desc')->get();
    //limit
     $res = DB::table('test')->orderBy('id','desc')->limit(2)->get();
    //join  四個參數:內連接,左連接,union :
     $res = DB::table('test')->join('em ','test.id','=','em.test_id')->get();
    //groupBy  
    //having….
    //7. 事務 
    //手動拋出  數據庫的引擎 是innodb 三個過程DB::beginTransaction(),DB::commit(),DB::rollback();
    DB::beginTransaction();
    try{
        DB::table('test')->where('id',4)->decrement('age',4);
        //throw  new \Exception('出問題了');
        DB::table('test')->where('id',6)->increment('age',4);
        DB::commit();
    }catch(\Exception $e){
        echo $e->getMessage();
        DB::rollback();
    }
    //自動操做
    DB::transaction(function () {
        DB::table('test')->where('id',4)->decrement('age',4);
        DB::table('test')->where('id',222)->increment('age',4);
    });
  4. Eloquent ORM
    Laravel 的 Eloquent ORM (Object Relational Mapping) 提供了漂亮、簡潔的 ActiveRecord 實現來和數據庫交互。每一個數據庫表都有一個對應的「模型」用來與該表交互。你能夠經過模型查詢數據表中的數據,並將新記錄添加到數據表中。
    1. 模型定義規則:model
      1. 默認定義到 app目錄下面 // 建議單獨放到Model的文件夾
      2. 全部模型都要繼承 基類Model use Illuminate\Database\Eloquent\Model;
      3. 模型名Model.php
      4. 類名和文件名一致 例如:UserController.php UserModel.php
      5. 模型與表一一對應,一個模型必定對應一個表,但一個表不必定要對應一個模型,例如:UserModel.php 模型默認會和 user_models 表對應,模型裏添加 $table屬性修改表名:protected $table='lampol_user';
    2. 默認狀況下,Eloquent 會默認數據表中存在 created_at 和 updated_at 這兩個字段。若是你不須要這兩個字段,則須要在模型內將 $timestamps 屬性設置爲 false
      // 時間默認存儲的是 年月日  時分秒
      public $timestamps = false;
      //修改 存儲時間格式 爲字符串
      protected $dateFormat = 'U’;
      自定義用於存儲時間戳的字段名
      const CREATED_AT = ‘login_time’;
      const UPDATED_AT = reg_time';
  5. 數據操做【控制器實現/模型實現】
    1. 插入數據
      類名::insert()   //和DB的用發基本同樣,返回bool
      類名::insertGetId()   //返回插入的id
      save() 方法   //返回bool
      類名::create()    //返回實例模型
      //須要先在你的模型上指定 fillable 或 guarded 的屬性
      protected  $fillable = []   能夠賦值的白名單
      protected  $guarded = []   能夠賦值的黑名單
    2. 更新數據
      //第一種
      $user = self::find(1);  
      $user->name='liming';   
      $user->save(); //Eloquent 也會假定每一個數據表都有一個名爲 id 的主鍵字段。你能夠定義一個受保護的 $primaryKey 屬性來覆蓋這個約定。例如:protected $primaryKey =‘uid’;  修改主鍵名
      //第二種
      self::where('uid',2)->update(['name'=>'xiaolizi']);
    3. 刪除數據
      //第一種
      $user = self::find(1);
      return $user->delete();
      //第二種 
      $user = self::destroy(2); //主鍵
      //第三種
      $user = self::where('uid',3)->delete();
    4. 查詢數據
      返回數據 toArray()
      //獲取一條數據
      $user = self::find(4); // 查詢一條數據  主鍵默認  返回模型實例
      $user = self::first()
      //獲取多條數據
      $user = self::all()//查詢全部數據 返回數據集
      $user = self::get()//查詢全部數據 返回數據集,和查詢構造器用法同樣
    5. 模型關聯
      [一對一/一對多/多對多]一個用戶對應一個電話號碼,一個用戶對應多個收貨地址,一個用戶對應多個角色而一個角色對應多個用戶
      1. 一對一
        一個User 對應一個  Mobile
        public function mobile(){
           return $this->hasOne('App\Model\MobileModel’,’foregin_id’,’local_id’); //第一個參數是Mobile模型,第二個參數關聯的鍵,默認是模型_id,第三個參數是Mobile模型id
        }
        //使用
        $mobile = self::find(4)->mobile->toArray();
        $mobile = self::find(4)->mobile()->value('mobile');
      2. 一對多
        public function address(){
        return $this->hasMany('App\Model\AddressModel','user_id');
        }
        //hasMany 和 hasOne 用法同樣
        $mobile = self::find(4)->mobile
        $mobile = self::find(4)->mobile()->value('mobile');
    6. 分頁
      查詢構造器分頁 
      $users = DB::table('lampol_user')->paginate(3);
      ORM分頁
      self::paginate(4);
      //簡單的分頁
      simplePaginate(15)
      視圖展現
      引入 bootstrap
      return view('index',['page'=>$page]);

      添加查詢參數到分頁 {{ $page-&gt;appends(['vip' =&gt; 'y'])-&gt;links() }}

第十二章 Laravel 表單驗證

框架對錶單傳過來的數據內置了一套機制,進行數據的合法性驗證。

  1. 使用 Validator
    use Illuminate\Support\Facades\Validator;
    $validator = Validator::make($data,$rules[,$messages]);//(參數一:是要驗證的數據,參數二:是驗證規則,參數三: 錯誤提示信息選填
    $rules = [‘username’=>’required’];
    $messages = [‘username.required’=>’用戶名不能爲空’];
  2. 判斷驗證是否經過
    $validator->fails();  //不經過  返回true  不然返回false
    $validator->passes(); //經過 返回true  不然返回 false
  3. 獲取錯誤信息
    $validator->errors()->first();  //獲取第一個錯誤信息
    $validator->errors()->all();   //獲取全部錯誤信息
  4. 經常使用的幾種驗證規則
    email   //必須是email格式
    numeric  //必須是整數
    ip   //必須是ip地址
    required  //必須 不爲空
    url  // 必須是url地址
    max  //字段的最大值
    min   //字段的最小值
    between:min,max  // 字段值的範圍
  5. 自定義驗證規則
    第一種:boot方法推薦,能夠寫到控制器裏也能夠寫到 \app\Providers\AppServiceProvider.php
    Validator::extend('mobile', function($attribute, $value, $parameters){
         return preg_match('/^1[34578][0-9]{9}$/', $value);
     });//屬性名稱 $attribute、屬性的值 $value、傳入驗證規則的參數數組 $parameter
     //添加  錯誤提示信息  
     resources\lang\en\validation.php

    第二種方式:在app下面建立一個Rules文件夾 而後建立一個驗證文件 CheckMobile.php

    <?php
     namespace App\Rules;
     use Illuminate\Contracts\Validation\Rule;
     class CheckMobile implements Rule{
       public function passes($attribute, $value){
             return preg_match('/^1[34578][0-9]{9}$/', $value);
         }
        public function message(){
             return '電話好默哀好像不太對吧大兄弟';
         }
     }

    而後使用

    use App\Rules\CheckMobile;
    $rules = ['phone'=>new CheckMobile];  // [‘phone’=>[‘require’, new CheckMobile]]

第十三章 Laravel 配置文件

  1. 配置文件有兩個地方
    env(配置名) :獲取根目錄下面的 .env文件 //
    .env文件主要存一些隨環境變化而變化的配置,不會被加到版本管理系統
    讀裏面env的配置,只放部分配置.

    config(文件名.key); 訪問config目錄下面的配置

  2. Laravel 包含各類各樣的全局「輔助」PHP 函數,框架自己也大量地使用了這些功能;若是你以爲方便,你能夠在你的應用中自由的使用它們。

    1. 關於路徑助手函數
      app_path()     //獲取app目錄的全路徑
      base_path()   //項目目錄的路徑
      config_path()  //配置文件 config全路徑
      database_path() //database目錄全路徑
      public_path()  //public 目錄全路徑
      resource_path()  //resource 目錄全路徑
      storage_path()  //storage 目錄全路徑
    2. URL
      action(‘UserController@index’)  獲取 路由
      asset(‘js/app.js’)  //靜態資源路徑
      secure_asset(‘js/app.js’)  //https 靜態資源路徑
      url(‘user’)   //路由生成全路徑url
      secure_url(‘user’)  //路由生成https路徑
    3. 字符串處理
      camel_case('hello_world’); 函數將給定的值符傳轉換爲「駝峯命名」helloWorld
      kebab_case('helloWorld’);函數將給定的字符串轉換爲「短橫線命名」hello-world
      snake_case('helloWorld’); 函數將給定的字符串轉換爲「蛇形命名」hello_world
      starts_with('hello world', 'hello’)  //true
      ends_with('hello world', 'd’)   //true
      str_limit('hello world', '3’)   // hel...
      str_random(4)  //函數生成一個指定長度的隨機字符串
    4. 數組處理
      array_add([‘name’=>‘liudehua’],‘age’,33)  添加鍵值到數組中
      array_except(['name'=>'liudehua','age'=>33],['age’]) 從數組中刪除給定的鍵/值對
      array_has([‘name’=>‘liudehua’,‘age’=>33],[‘age’])  判斷數組是否有鍵
      array_only([‘name’=>‘liudehua’,‘age’=>33],[‘age’])  獲取指定的鍵值
      array_random([‘name’=>‘liudehua’,‘age’=>33]) 隨機返回數組值
      head([‘name’=>‘liudehua’,‘age’=>33])  返回數組第一個值
      last([‘name’=>‘liudehua’,‘age’=>33])  返回數組最後一個值
    5. 其餘助手
      app()    函數返回 服務容器 實例
      back() 函數生成一個 重定向 HTTP 響應 到用戶以前的位置:
      config() 函數獲取 配置 變量的值。
      env()  函數獲取 環境變量 的值或者返回默認值
      cookie() 函數建立一個新的 cookie 實例
      session 函數能夠用來獲取或者設置 Session 值
      csrf_field() 函數生成包含 CSRF 令牌值的 HTML hidden 表單字段
      csrf_token() 函數獲取當前 CSRF 令牌的值
      method_field() 函數生成一個 HTML hidden 表單字段
      dd() 函數輸出給定的值並結束腳本運行
      dump() 函數打印給定的變量 不結束運行
      request()  函數返回當前 請求 實例或者獲取輸入項
      response 函數建立 響應 實例或者獲取響應工廠實例
      view()  函數獲取一個 視圖 實例
      redirect() 函數返回一個 重定向 HTTP 響應
      info() 函數將信息寫入日誌
      logger() 函數能夠將一個 debug 級別的消息寫入到 日誌 中
      encrypt() 函數使用 Laravel 的 加密器 對給定的值進行加密
      decrypt() 函數使用 Laravel 的 加密器 來解密給定的值
    6. Laravel 上傳圖片
      $img = $request->file(‘img’);  //獲取上傳圖片的信息
      $img->isValid()   //驗證圖片合法性
      $img->getClientOriginalName();   //獲取圖片名
      $img->getClientOriginalExtension();  //獲取圖片擴展名
      $img->getClientMimeType();  //獲取圖片mime
      $img->getClientSize();   //獲取圖片的大小
      $img->move($img_path,$img_name)  //開始上傳,第一個圖片存放目錄,第二個圖片名
    7. Laravel 驗證碼
      gd 庫 以及 fileinfo擴展打開 https://packagist.org/

      //1. composer下載驗證碼 `composer require mews/captcha`
      //2. 配置 添加下面的 config/app.php
      'providers' => [
           Mews\Captcha\CaptchaServiceProvider::class,
       ]
      'aliases' => [
           'Captcha' => Mews\Captcha\Facades\Captcha::class,
       ]
      
      //3.生成配置
      php artisan vendor:publish
      //4. 輸出 captcha 
      Captcha::src()
      //5. 驗證驗證碼
      $rules = ['cap' => 'required|captcha'];
      $message = ['cap.captcha'=>'驗證碼不正確啊'];
      $validator = Validator::make($request->input(), $rules,$message);  
      if($validator->fails()){
           dd($validator->errors()->all());
      }
    8. Laravel 日誌
      1. 配置文件在 config/logging.php
        ‘default’ =&gt; env(‘LOG_CHANNEL’, ‘stack’), //默認配置single一個日誌文件,daily天天一個日誌文件,第二個參數 能夠帶數據
      2. 使用
        use Illuminate\Support\Facades\Log;
        Log::info('hello this is info');
        Log::debug('hello this is debug');
        Log::notice('hello this is notice');
        Log::warning('hello this is warning');
        Log::error('hello this is error');
        Log::critical('hello this is critical');
        Log::alert('hello this is alert');
        Log::emergency('hello this is emergency’);
      3. 助手函數
        logger(‘Debug message’);  //debug 級別
        logger()->error(‘error’);
    9. Laravel artisan 命令
      1. 配置:php 命令添加到 環境變量
      2. 常見用法:
        php  astisan  list  列出全部的參數
        php artisan key:generate  從新生成 app key
        php artisan cache:clear  清空緩存
        php artisan config:clear  清空配置緩存
        php artisan  route:clear 清空配置緩存
        php artisan  view:clear  清空視圖緩存
        php artisan  route:list  列出配置的路由
        //建立控制器
        php artisan  make:controller   OrderController
        php artisan  make:controller   Admin/OrderController
        php artisan  make:controller   TestController  -r
        建立模型
        php artisan  make:model  TestModel
        php artisan  make:model  Admin\TestModel
        建立規則
        php artisan make:rule CheckEmail
    10. Laravel 類別名
      下面兩種引入均可以
      1. 門面模式
        use Illuminate\Support\Facades\Log;
        use  Log;
      2. 配置文件
        config/app.php alias 別名配置
相關文章
相關標籤/搜索