Laravel-Notes

Controller

生成

  • 使用Artisan

  • e.g.

    php artisan make:controller UserAuthController 
    

    結果: 產生 app/Http/Controllers/UserAuthController.php 控制器檔案

namespace

  • 用途: 標示本檔案放在什麼資料夾

  • 寫法: 用右斜線分開

  • e.g.:

    <?php
    namespace App\Http\Controllers;
    
  • ps. 注意大小寫

    • 在PhpStorm裡會自動區分大小寫,但EC2不會

方法 (function)

寫法: public function(){}
  • e.g.:
    <?php
    class UserAuthController extends controller {
      public function signUpPage(){
        $binding = [
          'title' => '註冊'
        ];
        return view('auth.signUp', $binding);
      }
    }
    
  • PS. array的寫法: "中框號" + "key=>value"
  • PSS. 若要回傳什麼的話就用 return
  • PSSS. view('auth.signUp', $binding)的意思是要去找resourses/views/auth資料夾裡的signUp.blade.php
常用工具
  • 接受輸入資料
    $input = request()->all;
  • 驗證
    1. 建立驗證規則

      <?php
      $rules = [
        'nickname' => [
            'required',
            'max:50',
        ],
        'email' => [
            'required',
            'email',
            'max:50'   
        ],
        'password' => [
            'required',
            'same:password_confirmation'  
        ],
        'type' => [
            'required',
            'in:G,A',  
        ],
      ];
      
    2. 驗證資料
      $validator = Validator::make($input, $rules);

      • 使用靜態方法呼叫Validator (前題: 需在上面 use Validator;)
      • 存成物件存在$Validator
      <?php
      if($validator->fails()){
         return redirect('user/auth/sign-up')
                ->withErrors($validator)
                ->withInput();
       }
      
      • 取出驗證失敗的方法: If($validator->fails())
      • 把失敗資料帶著傳回去return redirect的目的地址
        • withErrors($validator)
        • withInput()
      • 在 blade 顯示 error message
        • 在 route 裡認到’user/auth/sign-up’後就會轉到 signUp.blade,並帶著 $errors 過去
          <?php
          @if($errors)
             <ul>
                 @foreach($errors->all() as $err)
                 <li>{{ $err }}</li>
                 @endforeach
             </ul>
        
        • all 的方法來把 $errors 裡面的資料取出來
        • 取出來之後才能再用foreach來把一筆一筆印出
        • 以上語法可以存在components資料夾內,並命名為validationErrorMessage.blade
        • 在主 blade 內就可以用 @include('components.validationErrorMessage') 把它引起來用

View

@extends: 繼承指定模版

  • e.g. extends('layout.master)

@section: 傳值

  • 兩種用法
    1. @section(要傳的片段, 要傳的內容)
      • e.g. @section('title',$title)
    2. @section, @endsection: 指定要傳的片段,接著再把要傳的內容包在其中
      • e.g.
        <?php
        @section('content')
         // What you want to express
         abc
        @endsection
        

直接引用其他模版

  • @include(‘components.validationErrorMessage’)
    *