laravel
-
รันคำสั่ง Migration ของ Laravel บน url
(15 Jul 2020 | Tags:
รันคำสั่ง Migration ของ Laravel บน url | vachirawit รันคำสั่ง Migration ของ Laravel บน url
เพิ่มคำสั่งที่
routes.php
แล้วก็เรียกใช้ผ่าน urlhttp://<domain>/migrate
//Clear route cache: Route::get('/migrate', function() { $exitCode = Artisan::call('migrate'); return 'migration'; });
วิธีนี้ผมจะใช่กับ Server หรือ Host ที่ไม่ยอมให้่
ssh
เข้าไป หรือใช้php artisan migrate
ไม่ได้ -
Review: Laravel Medialibrary - ไม่ต้องสร้าง Culumn เพิ่ม
(12 Jul 2020 | Tags:
Review: Laravel Medialibrary - ไม่ต้องสร้าง Culumn เพิ่ม | vachirawit Review: Laravel Medialibrary - ไม่ต้องสร้าง Culumn เพิ่ม
ผมใช้ php:7.4 และ Laravel:7 ในการสาธิต เพื่อสาธิตให้เข้าใจง่าย ผมจะสร้างเว็บ Blog อย่างง่าย คือ สามารถ Post ข้อความและรูปได้ เริ่มจาก สร้าง migration Posts Table
// class CreatePostsTable Schema::create('posts', function (Blueprint $table) { $table->id(); $table->text('content'); $table->timestamps(); });
ติดตั้ง laravel-medialibrary
composer require "spatie/laravel-medialibrary:^8.0.0" php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="migrations" php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="config" php artisan migrate
การทำงานของ **Laravel-medialibrary** ทำงานเริ่มต้น public path จึงทำให้มันไม่พบ file เมื่อเรา addMedia สามารถแก้ได้ดังนี้
// config/filesystems.php 'links' => [ public_path('storage') => storage_path('app/public'), public_path('media') => storage_path('app/media'), ],
จากนั้น
php artisan storage:link
เพื่อสร้าง Link directory ให้เข้าถึงไฟล์ได้ผ่าน public// config/media-library.php 'disk_name' => env('MEDIA_DISK', 'media'),
การใช้งาน
เพิ่มความสามารถในการเก็บรูปใน Post Model ด้วย
implements Spatie\MediaLibrary\HasMedia
และuse Spatie\MediaLibrary\InteractsWithMedia
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; class Post extends Model implements HasMedia { use InteractsWithMedia; }
สร้าง UI สร้างสำหรับ เขียน Post และ Upload รูป สำคัญเลยต้องมี
enctype="multipart/form-data"
เพราะผมลืมบ่อยมาก<!-- resources/views/post/index.blade.php --> .... <form enctype="multipart/form-data" action="{{ route('posts.store') }}" method="POST"> @csrf <div class="card-body"> <div class="form-group"> <textarea class="form-control" name="content"></textarea> </div> <div class="form-group"> <input type="file" name="images" > </div> <button class="btn btn-primary">submit</button> </div> </form> ...
ผลที่ได้
แล้วส่งรูปและข้อความไปยัง function store ใน PostController
// app/Http/Controllers/PostController.php public function store(Request $request) { $path = $request->file('images')->store('media'); $post = new Post; $post->content = $request->content; $post->save(); $post->addMedia($path)->toMediaCollection(); return back(); }
toMediaCollection
ตรงนี้สามารถกำหนดได้หลายรูปแบบ เช่น$post->addMedia($path)->toMediaCollection('cover'); $post->addMedia($path)->toMediaCollection('banners'); $post->addMedia($path)->toMediaCollection('attach-image');
ทำให้ระบุได้เลยว่า รูปชุดนี้ใช้ทำอะไร รูปชุดนั้นใช้ทำอะไร
การแสดงผล
ทำได้งานๆ โดย
$item->getMedia()->first()
ได้เลยตามนี้ หรือ วิธีอื่นๆ<!-- resources/views/post/index.blade.php --> ... @foreach ($posts as $item) <div class="card mb-3"> <div class="card-body pb-1"> <p> {!! $item->content !!} </p> </div> <picture> {{ $item->getMedia()->first() }} </picture> </div> @endforeach ...
ผลที่ได้
นอกจากนี้ยังมีการ Resize Image อยู่ก็สามาทำง่ายเพียงแค่เพิ่ม function ลงใน Model
... use Spatie\MediaLibrary\MediaCollections\Models\Media; ... public function registerMediaConversions(Media $media = null): void { $this->addMediaConversion('thumb') ->width(368) ->height(232) ->sharpen(10); } ...
จากนั้นเมื่อ addMedia ทุกครั้งมันก็จะ Resize Image ให้ทั้งที และนำไปใช้ด้วย
$media->getPath(); // the path to the where the original image is stored $media->getPath('thumb'); // the path to the converted image with dimensions 368x232 $media->getUrl(); // the url to the where the original image is stored $media->getUrl('thumb'); // the url to the converted image with dimensions 368x232
เท่านี้ ครับไปลองใช้กันได้
REF
-
ติดตั้ง Laravel ด้วย Docker สำหรับ Dev
(12 Jul 2020 | Tags:
ติดตั้ง Laravel ด้วย Docker สำหรับ Dev | vachirawit ติดตั้ง Laravel ด้วย Docker สำหรับ Dev
วิธีที่ผมใช้นี้มีแค่ Docker ก็เพียงพอแล้ว สำหรับการเริ่มต้นโปรเจค
- ติดตั้ง Laravel ด้วย
$ docker run --rm --interactive --tty \\ --volume $PWD:/app \\ composer create-project --prefer-dist laravel/laravel laravel-blog
-
เข้า https://phpdocker.io/generator เพื่อสร้างไฟล์
docker-compose.yml
ตั้งชื่อโปรเจคlaravel-blog
Global configuration — Project name : laravel-blog — Base port: 8080 PHP configuration — PHP Version: 7.2.x — Extensions (PHP 7.2.x): MySQL, Bcmath, GD MySQL — Enable MySQL — Version: 5.7 — Root Password: toor — Database Name: admin_laravel_blog — Database Username: admin_laravel_blog — Database Password: 123456
แล้วกด “Generate project archive” จะได้รับ “laravel-blog.zip”
- แตกไฟล์ laravel-blog.zip
unzip laravel-blog.zip && mv laravel-blog/* /<project_path>/aravel-blog
- แก้ไข้ .env
DB_CONNECTION=mysql DB_HOST=msql DB_PORT=3306 DB_DATABASE=admin_laravel_blog DB_USERNAME=admin_laravel_blog DB_PASSWORD=1234
- เปิด server project ด้วยคำสั่ง
$ docker-compose up
- รันคำสั่ง
$ docker-compose exec php-fpm php artisan migate
- เปิด Browser “http:/127.0.0.1:8080”
- ติดตั้ง Laravel ด้วย
-
แปลง MySQL ไปเป็น Laravel Migration
(12 Jul 2020 | Tags:
แปลง MySQL ไปเป็น Laravel Migration | vachirawit แปลง MySQL ไปเป็น Laravel Migration
- Download Sequel Pro
- Installation cviebrock/sequel-pro-laravel-export
- ใช้ Sequel Pro Export ตารางออกมา - Export from Sequel Pro to a Laravel Migration
mysql
-
แปลง MySQL ไปเป็น Laravel Migration
(12 Jul 2020 | Tags:
แปลง MySQL ไปเป็น Laravel Migration | vachirawit แปลง MySQL ไปเป็น Laravel Migration
- Download Sequel Pro
- Installation cviebrock/sequel-pro-laravel-export
- ใช้ Sequel Pro Export ตารางออกมา - Export from Sequel Pro to a Laravel Migration
kiosk
-
ขั้นตอน/วิธีเปิดโหมด Kiosk ใน Chrome สำหรับ Windows
(12 Jul 2020 | Tags:
ขั้นตอน/วิธีเปิดโหมด Kiosk ใน Chrome สำหรับ Windows | vachirawit ขั้นตอน/วิธีเปิดโหมด Kiosk ใน Chrome สำหรับ Windows
Kiosk คือเครื่องให้บริการแบบเป็นตู้ๆ วางไว้ตามที่ต่างๆ ที่ำกันสิทธิของ User ให้ทำได้แค่ไม่กี่อย่าง
- สร้าง shortcut ของ Chrome
- คลิกขวาเปิด Properties
- ที่ช่อง Target: เพิ่ม
...chrome.exe" --kiosk --kiosk-print --overscroll-history-navigation=0 "https://gist.github.com/"
อาจจะแก้เป็นเว็บที่เราต้องการ--kiosk
- เปิดโหมด kiosk--kiosk-print
- เพิ่มซ่อน dialog print จาก User--disable-pinch
- เพื่อให้จอ kiosk ของ Zoom ไม่ได้ Lock การ Zoom นั้นเอง--overscroll-history-navigation=0
- Lock ไม่ให้ปัดน่าจอเพื่อย้อนกลับ
- คลิก Apply
- เปิด shortcut chrome สร้างเอาไว้
docker
-
ติดตั้ง Laravel ด้วย Docker สำหรับ Dev
(12 Jul 2020 | Tags:
ติดตั้ง Laravel ด้วย Docker สำหรับ Dev | vachirawit ติดตั้ง Laravel ด้วย Docker สำหรับ Dev
วิธีที่ผมใช้นี้มีแค่ Docker ก็เพียงพอแล้ว สำหรับการเริ่มต้นโปรเจค
- ติดตั้ง Laravel ด้วย
$ docker run --rm --interactive --tty \\ --volume $PWD:/app \\ composer create-project --prefer-dist laravel/laravel laravel-blog
-
เข้า https://phpdocker.io/generator เพื่อสร้างไฟล์
docker-compose.yml
ตั้งชื่อโปรเจคlaravel-blog
Global configuration — Project name : laravel-blog — Base port: 8080 PHP configuration — PHP Version: 7.2.x — Extensions (PHP 7.2.x): MySQL, Bcmath, GD MySQL — Enable MySQL — Version: 5.7 — Root Password: toor — Database Name: admin_laravel_blog — Database Username: admin_laravel_blog — Database Password: 123456
แล้วกด “Generate project archive” จะได้รับ “laravel-blog.zip”
- แตกไฟล์ laravel-blog.zip
unzip laravel-blog.zip && mv laravel-blog/* /<project_path>/aravel-blog
- แก้ไข้ .env
DB_CONNECTION=mysql DB_HOST=msql DB_PORT=3306 DB_DATABASE=admin_laravel_blog DB_USERNAME=admin_laravel_blog DB_PASSWORD=1234
- เปิด server project ด้วยคำสั่ง
$ docker-compose up
- รันคำสั่ง
$ docker-compose exec php-fpm php artisan migate
- เปิด Browser “http:/127.0.0.1:8080”
- ติดตั้ง Laravel ด้วย
bootstrap
-
เขียนเว็บ Responsive แต่จำขนาดไม่ได้ก็ไปดูที่ Bootstrap
(13 Jul 2020 | Tags:
เขียนเว็บ Responsive แต่จำขนาดไม่ได้ก็ไปดูที่ Bootstrap | vachirawit เขียนเว็บ Responsive แต่จำขนาดไม่ได้ก็ไปดูที่ Bootstrap
การกำหนดขนาดหน้าจอ Responsive 5 ขนาดในแบบ Botstrap ประกอบด้วย xl lg md sm และ xs จากหัวข้อ Responsive breakpoints สิ่งที่นำมาใช่อย่างได้ผลมีดังนี้
// Extra small devices (portrait phones, less than 576px) @media (max-width: 575.98px) { ... } // Small devices (landscape phones, 576px and up) @media (min-width: 576px) and (max-width: 767.98px) { ... } // Medium devices (tablets, 768px and up) @media (min-width: 768px) and (max-width: 991.98px) { ... } // Large devices (desktops, 992px and up) @media (min-width: 992px) and (max-width: 1199.98px) { ... } // Extra large devices (large desktops, 1200px and up) @media (min-width: 1200px) { ... }
jekyll
-
ใช้ Header หรือ h1 ใน Markdown ให้เป็น title ใน jekyll
(17 Jul 2020 | Tags:
ใช้ Header หรือ h1 ใน Markdown ให้เป็น title ใน jekyll | vachirawit ใช้ Header หรือ h1 ใน Markdown ให้เป็น title ใน jekyll
- เพิ่ม
gem 'jekyll-titles-from-headings'
ลงใน Gemfile - รันคำสั่ง
bundle update
เพื่อติดตั้งมัน - เพิ่ม jekyll-titles-from-headings ลงใน plugins array ใน
_config.yml
-
เพิ่มคำสั่งตั้งค่าใน
_config.yml
:titles_from_headings: enabled: true strip_title: true collections: true
-
ทดสอบด้วยการสร้าง Post ใหม่
_posts/2018-04-10-title-strip.md
--- title: "Title Strip Test Post" --- # Title Override
ค่า
page.title
ที่ได้จะเป็น Title Override ตาม Header ใน .mdRef:
- เพิ่ม