Basic Laravel Training (for CV)

From Ta Wiki
Revision as of 18:48, 14 March 2019 by Tata (talk | contribs) (→‎Eloquent)
Jump to navigation Jump to search

Reference

  • Laravel Documentation
https://laravel.com/docs/5.8

Installation

Requirements

  • 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
  • BCMath PHP Extension

Steps

  1. Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!
  2. Install Composer
    https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos
    หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ ./composer.phar แทนที่ composer ถ้าทำการ Install composer เป็น local
  3. สร้าง Laravel Project โดยใช้ composer
    composer create-project --prefer-dist laravel/laravel PROJECT_NAME 
  4. Run Local Development Server
    php artisan serve # for running on localhost:8000
    or
    php artisan serve --port=8888 # for running on localhost:8888

Basic Tutorial

Important directory / file

  • app Where the models are
    • Http
      • Controllers
      • Middleware
  • config
  • database
  • public Where the public files (ie. css, js)
  • resources
    • views
  • routes
    • api.php
    • web.php
  • vendor Where the additional libraries store
  • .env all environment variables (ie. DB username/password)

Intro

Controller & Route

  1. Let's make a controller: page_controller
    php artisan make:controller CONTROLLER_NAME
    จะมีไฟล์ app/Http/Controllers/page_controller.php ปรากฎ
  2. ในไฟล์จะมี code เหล่านี้
     1 <?php
     2 
     3 namespace App\Http\Controllers;
     4 
     5 use Illuminate\Http\Request;
     6 
     7 class page_controller extends Controller
     8 {
     9     //
    10 }
    
  3. ลองสร้าง method index
    1     public function index(){
    2         $menu = array("Home", "My course", "Setting");
    3         return $menu;
    4     }
    
  4. เพิ่ม Route ใน routes/web.php
    1 Route::get('home','page_controller@index');
    
  5. ลองทดสอบเรียก url
    http://localhost:8000/home
  6. ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view
  7. ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน resources/views โดยให้สร้าง view ชื่อว่า home.blade.php
  8. ใน controller method index จะเปลี่ยนแปลงการ return ให้ return view แทน
    1     public function index(){
    2         $menu = array("Home", "My course", "Setting");
    3         return view("home")->with('menu',$menu);
    4     }
    
  9. ใน home.blade.php ให้ลองเขียน html เพื่อแสดง menu เป็น unordered list
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     7     <title>Document</title>
     8 </head>
     9 <body>
    10     <ul>
    11         @foreach($menu as $eachmenu)
    12             <li>{{$eachmenu}}</li>
    13         @endforeach
    14     </ul>
    15 </body>
    16 </html>
    

View (Blade Template)

Database

Preparation

  • สร้าง database (สมมติว่าชื่อ laravel_training)
  • แก้ไข .env
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=laravel_training
    DB_USERNAME=USERNAME
    DB_PASSWORD=PASSWORD
  • แก้ไข file app/Providers/AppServiceProvider.php ข้างบนสุดเพิ่ม
    use Illuminate\Support\Facades\Schema;
  • แก้ไข file app/Providers/AppServiceProvider.php function boot เพิ่ม
    Schema::defaultStringLength(191);
  • ลอง migrate default script
    php artisan migrate

Model & DB

  • php artisan make:model MODEL_NAME --migration
  • php artisan make:migration MIGRATION_NAME

Eloquent

  • new item
    $course = new course();
    $course->number = "2110221";
    $course->title = "Computer Engineering Essentials";
    $course->year = 2018;
    $course->semester = 2;
    $course->save();
    
  • fetch item
    $allcourses = course::all();
    $findcourse = course::find(1);
    $findcourse = course::where(number,"2110221")->get();
    
    // ->where("title","like","%".$keyword."%")
    // ->orderBy('created_at','desc')
    // ->paginate(10);
    // In view show page numbers: {{$items->links()}}
    
  • edit item
    $course = course::find(1);
    $course->title = "NEW NAME";
    $course->save();
    
  • delete item
    $course = course::find(1);
    $course->delete();
    

Handle CRUD

  • php artisan make:controller CONTROLLER_NAME --resource
  • method: get, post, patch, delete
  • Route::resource('ROUTE', 'CONTROLLER');
  • php artisan route:list

Relationship

one to one
  • Defining relationship
    return $this->hasOne('App\Phone', 'foreign_key', 'local_key');
  • Defining inverse relationship
    return $this->belongsTo('App\User', 'foreign_key', 'other_key');
one to many
  • Defining relationship
    return $this->hasMany('App\Comment', 'foreign_key', 'local_key');
  • Defining inverse relationship
    return $this->belongsTo('App\Post', 'foreign_key', 'other_key');
many to many
  • Defining relationship
    return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');
    return $this->belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')
  • Defining inverse relationship
    return $this->belongsToMany('App\User', 'role_user', 'role_id', 'user_id');
    return $this->belongsToMany('Model','Intermediate table name','fk of current model','fk of another model')

Authentication

User System

Access Control