Laavel 9의 새로운 기능을 빠르게 확인하는 Enum route binding, Explicit Binding

8653 단어 Laraveltech

전언


라벨9 발매도 임박했지만, 라벨9가 새롭게 추가한 기능을 시험해보는 엔뮤루트 빙딩.
(주) 아직 정식 발매가 되지 않아 반전이 있을 수 있다.(문제 없을 것 같다)
참조: [9.x] adds implicit Enum route binding#40281
Laavel9의 개발판으로 다음과 같은 느낌을 설치할 수 있습니다.
composer create-project --prefer-dist laravel/laravel laravel-9-dev dev-develop
(laravel-9-dev の箇所はプロジェクト名です)
또한 Enum은 PHP8입니다.1부터 시작하는 새로운 기능.

메시지


리블릭을 참고해서 다음 느낌으로 제작해보세요.
app/Enums/UserStatus.php
<?php

namespace App\Enums;

enum UserStatus: string
{
    case Guest = 'guest';
    case Valid = 'valid';
    case Locked = 'locked';

    public function greeting(): string
    {
        return 'ようこそ、'.$this->value.'さん';
    }
}
web.php
use App\Enums\UserStatus;

Route::get('/users/{status}', function (UserStatus $status) {
    return $status->greeting();
});
이렇게.
http://localhost/users/locked를 통해 액세스할 때 출력은 다음과 같습니다.
ようこそ、lockedさん
valid나locked일 때 상상한 대로 출력됩니다.
존재하지 않는 hoge로 접근하면 http://localhost/users/hoge
404NOT FOUND 화면을 내보냅니다.
Enum을 최대한 활용하는 사람들에게는 매우 편리한 기능이라고 생각합니다.
또한 스트링을 반납한 백키드 엔움만 사용할 수 있다.

맞다


모기장 밖으로 내놓은 느낌Explicit Binding 기능이지만 이것도 잠재력이 크네요.특히 Route::bind()
'Route model binding'이라는 이름이 선행됐기 때문에 반드시 Eloquent 모델이어야 한다고 생각하기 쉽지만, 그것에 국한되지 않고 아무거나 괜찮다.
예를 들어 Laavel9이 아니더라도 Explicit Binding 기능을 사용하여 이러한 기능을 수행할 수 있습니다.느낌은 다음과 같다.
web.php
Route::get('/users2/{status2}', function ($status2) {
    return $status2->greeting();
});
RouteServiceProvider
use App\Enums\UserStatus;

class RouteServiceProvider extends ServiceProvider
{
    public function boot()
    {
        Route::bind('status2', function ($value) {
            abort_if(
                is_null($status = UserStatus::tryFrom($value)), 404
            );

            return $status;
        });
    }
}
이렇게.
http://localhost/users2/locked로 방문하면 이전과 같은 느낌으로 출력되며,/users2/hoge로 출력되면'404 NOT FOUND'가 됩니다.

잡감


Explicit Binding, 가끔 사용할 수 있습니다.가장 좋은 것은 남용하지 않는 것이다.
잘못이 있으면 메시지를 남겨 주세요.

좋은 웹페이지 즐겨찾기