Difference between revisions of "Basic Laravel Training (for CV)"
								
								Jump to navigation
				Jump to search
				
				
		
					
								
							
		| Line 177: | Line 177: | ||
* Route::resource('ROUTE', 'CONTROLLER');  | * Route::resource('ROUTE', 'CONTROLLER');  | ||
* php artisan route:list  | * php artisan route:list  | ||
| + | * Handle request  | ||
| + | *: <syntaxhighlight lang="php">  | ||
| + | $name = $request->input('name', 'Default');   | ||
| + | $name = $request->name;  | ||
| + | </syntaxhighlight>  | ||
| + | * Validation --> [https://laravel.com/docs/5.8/validation See Doc]  | ||
| + | *: <syntaxhighlight lang="php">  | ||
| + | $request->validate([  | ||
| + |     'title' => 'required|max:255',  | ||
| + |     'body' => 'required',  | ||
| + | ]);  | ||
| + | |||
| + | // Frontend display error  | ||
| + | @if ($errors->any())  | ||
| + |     <div class="alert alert-danger">  | ||
| + |         <ul>  | ||
| + |             @foreach ($errors->all() as $error)  | ||
| + |                 <li>{{ $error }}</li>  | ||
| + |             @endforeach  | ||
| + |         </ul>  | ||
| + |     </div>  | ||
| + | @endif  | ||
| + | </syntaxhighlight>  | ||
==== Relationship ====  | ==== Relationship ====  | ||
Revision as of 23:27, 14 March 2019
Contents
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
- Install LAMP Stack (ie. XAMPP) อย่าลืมจำ mysql root password!!
 - Install Composer
- https://getcomposer.org/doc/00-intro.md#installation-linux-unix-macos
 - หมายเหตุ: เวลาเรียกใช้งาน composer อาจจะต้องใช้ 
./composer.pharแทนที่composerถ้าทำการ Install composer เป็น local 
 - สร้าง Laravel Project โดยใช้ composer
composer create-project --prefer-dist laravel/laravel PROJECT_NAME
 - 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
appWhere the models areHttpControllersMiddleware
configdatabasepublicWhere the public files (ie. css, js)resourcesviews
routesapi.phpweb.php
vendorWhere the additional libraries store.envall environment variables (ie. DB username/password)
Intro
Controller & Route
- Let's make a controller: page_controller
php artisan make:controller CONTROLLER_NAME
- จะมีไฟล์ 
app/Http/Controllers/page_controller.phpปรากฎ 
 - ในไฟล์จะมี 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 }
 - ลองสร้าง method index
1 public function index(){ 2 $menu = array("Home", "My course", "Setting"); 3 return $menu; 4 }
 - เพิ่ม Route ใน 
routes/web.php1 Route::get('home','page_controller@index');
 - ลองทดสอบเรียก url
http://localhost:8000/home
 - ปกติแล้วสิ่งที่ controller คืนมักจะไม่ใช่ array หรือ object ธรรมดา ยกเว้นกรณีที่กำลังเขียน api .. หากเป็นกรณี webpage มักจะคืนเป็น view
 - ลองสร้าง view (การสร้าง view จะไม่สามารถเรียกผ่าน artisan ได้ จะต้องสร้างด้วยตัวเอง ใน 
resources/viewsโดยให้สร้าง view ชื่อว่าhome.blade.php - ใน 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 }
 - ใน 
home.blade.phpให้ลองเขียน html เพื่อแสดง menu เป็น unordered list1 <!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)
- <meta name="csrf-token" content="Template:Csrf token()">
 - Template:Config('app.name', 'Laravel')
 - @include('inc.messages')
 - @yield('content')
 - @extends('layouts.app')
 - @section('content')
@endsection - @if
 - @for
 - @foreach
 - @csrf
 - {{}}
 - {!! !!}
 
Database
Preparation
- สร้าง database (สมมติว่าชื่อ laravel_training)
 - แก้ไข 
.envDB_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.phpfunction 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
 - Handle request
$name = $request->input('name', 'Default'); $name = $request->name;
 - Validation --> See Doc
$request->validate([ 'title' => 'required|max:255', 'body' => 'required', ]); // Frontend display error @if ($errors->any()) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
 
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')