Laavel 9의 새로운 기능을 빠르게 확인하는 Enum route binding, Explicit Binding
전언
라벨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.phpuse 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();
});
RouteServiceProvideruse 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, 가끔 사용할 수 있습니다.가장 좋은 것은 남용하지 않는 것이다.
잘못이 있으면 메시지를 남겨 주세요.
Reference
이 문제에 관하여(Laavel 9의 새로운 기능을 빠르게 확인하는 Enum route binding, Explicit Binding), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nshiro/articles/12f7e45dabdca0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)