[php] 라라벨 8 새기능
- Laravel 8 release new features
https://laravel.com/docs/8.x/releases
- 출시된 새 기능 내용을 보니 화끈한 기능은 없어 보임, 속도관련 성능향상이 있으면 좋았을텐데
- 메이저 버전을 6개월마다 발표
- 라라벨 버전
발표 (보안 패치 기한)
5.5(LTS) 2017/8 (~2020/8)
6.0(LTS) 2019/9 (~2022/9)
7.0 2020/3 (~2021/3)
8.0 2020/9 (~2023/1)
9.0(LTS) 2022/1 (~2025/1)
10.0 2023/1 (~2025/1)
//------------------------------
* Models Directory 기본 경로 변경
app -> app/Models
//-----------------------------------
* 동적 Blade Components
- 런타임에 변수에 따라 Component를 동적으로 렌더링
- dynamic-component
<x-dynamic-component :component="$componentName" class="mt-4" />
//------------------------------
* Improved Rate Limiting
- 기존 throttle 기능 업그레이드, RateLimiter 파사드
- 속도 제한을 동적으로 구축
$request->user()->vipCustomer()
? Limit::none()
: Limit::perMinute(100);
//-----------------------------------
* 개선된 유지 관리 모드 (Improved Maintenance Mode)
--allow 옵션을 제거되고 --secret옵션이 새로 추가됨
- 관리 모드로 들어갈때 --secret 옵션 사용
php artisan down --secret="1630542a-246b-4b66-afa1-dd72a4c43515"
- 지정한 비밀키를 통해 접속을 하면 , 이후 부터 down 상태에서도 사용가능
https://example.com/1630542a-246b-4b66-afa1-dd72a4c43515
//-----------------------------------
- Pre-Rendering The Maintenance Mode View
- composer 종속성이 적용되기전에 보여줄 메시지 지정
php artisan down --render="errors::503"
//-----------------------------------
* Routing Namespace 변경
- RouteServiceProvider 가 $namespace를 기본으로 포함하지 않는다.
- 라우팅 방식이 표준 php 호출 방식으로 변경됨
- v7 이하
Route::get('/users', 'UserController@index');
//--------------
- v8
Route::get('/users', [UserController::class, 'index']);
//------------------------------
* Job Batching(일괄 작업)
- Bus 파사드를 이용한 새로운 일괄 작업
- then, catch, finally 를 이용한 완료 콜백 사용
$batch = Bus::batch([
new ProcessPodcast(Podcast::find(1)),
new ProcessPodcast(Podcast::find(2)),
])->then(function (Batch $batch) {
// 작업 성공시
})->catch(function (Batch $batch, Throwable $e) {
// 작업 실패시
})->finally(function (Batch $batch) {
// 모든 작업 종료시
})->dispatch();
return $batch->id;
//-----------------------------------
* 클로저 Dispatch / Chain catch
- 클로저에 에러 발생시 catch 체인 실행
use Throwable;
dispatch(function () use ($podcast) {
$podcast->publish();
})->catch(function (Throwable $e) {
// 에러 발생시 실행
});
//-----------------------------------
* Event Listener 개선
- 클로저 기반 이벤트 리스너는 Event::listen 로 등록 가능
Event::listen(function (PodcastProcessed $event) {
//
});
- 클로저 기반 이벤트 리스너는 queueable 지정 가능
- queueable로 지정되면 onConnection, onQueue, delay 메서드 사용 가능
Event::listen(queueable(function (PodcastProcessed $event) {
//
})->onConnection('redis')->onQueue('podcasts')->delay(now()->addSeconds(10)));
//----------------------------------------------------------------
//------------------------------
* Laravel Jetstream
- 앱의 기본 기능 제공( UI scaffolding, 기본 디자인 템플릿)
- 로그인, 회원등록, 이메일 확인, 2 단계 인증, 세션 관리, Laravel Sanctum을 통한 팀관리
- Tailwind CSS를 기본 사용, Livewire 나 Inertia 선택 가능
//------------------------------
* Model Factory Classes
- 모델 팩토리 : 테스트를 위한 DB 자료 자동 생성 기능
- 클래스 기반으로 재작성, first-class 관계 지원
User::factory()->count(50)->create();
- 50개 테스트 레코드를 자동 생성
//------------------------------
* Migration Squashing
- 여러 DB 마이그레이션 파일을 단일 SQL 파일로 만듬(스쿼싱)
php artisan schema:dump
or
php artisan schema:dump --prune
//-----------------------------------
* 시간 테스트 Helpers
- 테스트시 now 나 Illuminate\Support\Carbon::now() 의 결과값을 임의로 조작
$this->travel(-5)->hours();// 5시간 전으로 조정
//-----------------------------------
* Artisan serve 명령어 개선
.env 파일이 변경되면 자동 재시작
//-----------------------------------
* Tailwind Pagination Views
- 페이지네이터가 Tailwind CSS 사용
- Bootstrap 3 , 4 도 사용 가능