Code/PHP

[php] 라라벨 8 새기능

codens 2020. 9. 24. 07:59

 

    - 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  도 사용 가능





반응형