[1일 1식 라라벨] 2019년 8월호 구독자 모집

1일 1식 라라벨 8월호 구독자를 모집합니다.

7월호 3주차가 끝났는데 다행히 펑크를 낸 날은 없었네요 🙂 용기내서 조금 더 해봅니다.

7월호에 발행했던 글들은 아래와 같습니다.

  • 5.8.25 버전부터 Response::assertViewHas()로 공유 데이터도 확인 가능
  • 모델 변경 이력을 자동을 저장해주는 패키지 Revisionable
  • 5.8.27 버전에 whereHasMorph() 추가됨
  • 특정 버전의 라라벨 설치하기
  • 라라벨 패키지를 선택할 때 물어야 할 8가지 질문
  • 테일러 오트웰은 왜 API 라우트를 routes/web.php에 작성했을까?
  • 테일러 오트웰이 사랑한 헬퍼, tap()
  • 5.8.28 새기능 1 – TestResponse에 tap 기능 추가
  • 5.8.28 새기능 2 – 컬렉션에 병합, 교체 기능 추가
  • 5.8.28 새기능 3 – Session에 only 메소드 추가
  • ERD를 그려주는 Laravel ER Diagram Generator
  • 의존성 충돌 해결하기
  • 라라벨 5.8.29 릴리즈
  • 라라벨 리퀘스트 라이프사이클
  • 라라벨에서 TailwindCSS 사용하기

많은 신청 바랍니다~ 신청 링크 https://forms.gle/ysHkKGdhhKka2ECK8

[1일 1식 라라벨 샘플] route:list를 JSON으로 출력하는 기능이 추가되었다

라라벨 5.8.25가 나왔다. (같은 날 긴급 패치가 나와서 현재 최신 버전은 5.8.26이다.) 5.8.25에서는 route:list를 JSON으로 출력하는 기능이 추가되었다.

route:list

route:list는 터미널에서 전체 라우트를 테이블 형태로 출력하는 아티즌 명령어이다. 아래와 같이 실행할 수 있다.

php artisan route:list

아래는 모던 PHP 유저 그룹 홈페이지 의 라우트를 출력한 예시이다.

route:list를 JSON으로 출력하기

라우트 목록을 JSON으로 출력하고 싶으면 --json 옵션을 붙이면 된다.

php artisan route:list --json

그러면 아래와 같이 JSON 형식으로 출력된다.

왜 만들었을까?

이 기능을 추가한 제이슨 맥크레리“프로그램으로 쉽게 파싱될 수 있어서 다른 도구나 서비스에 의해 쓰이기 좋다”고 이유를 밝혔다. 그런데 다른 도구나 서비스가 아티즌 커맨드를 쓰는 일이 있나 싶다.

기존에도 원한다면 라우트 파사드를 통해 이용해서 전체 라우트를 조회할 수 있었다.

$routes = \Illuminate\Support\Facades\Route::getRoutes()->get();

// get() 메소드에 조회하고자 하는 HTTP 메소드를 지정할 수도 있다.
$getRoutes = \Illuminate\Support\Facades\Route::getRoutes()->get('GET');

굳이 추가로 만든 이유를 찾자면 몇가지 항목으로 미리 정리해서 뽑아주기 때문에 살짝 더 편리할 수 있다 정도 아닐까? 아티즌 커맨드로 라우트 목록을 받으려면 아래와 같이 하면 된다.

Artisan::call('route:list --json');
$routes = Artisan::output();

어디에 쓰지?

전 직장에 입사했을 때, 이미 라라벨로 만든 애플리케이션이 잘 돌아가고 있었다. 다만, 테스트가 하나도 없었다. 사장님이 우선은 접속 안되는 페이지가 없는지 확인하는 테스트만 있어도 좀 안심이 될 것 같다고 이야기했고 나도 동의했다. 그때는 라우트 목록을 JSON으로 뽑는 기능도 없었고, 라우트 파사드로 조회할 수 있는지도 몰라서 아래와 같이 단순 무식하게 짰다.

$this->get("/")->assertSuccessful();

$this->get("/user/login")->assertSuccessful();
$this->get("/user/add")->assertSuccessful();
$this->get("/user/forget")->assertSuccessful();
... //이렇게 수십 줄이 이어진다.

// 로그인이 필요한 페이지는 이런 식으로
$this->actingAs($user)->get('/user/changePassword')->assertSuccessful();

지금 다시 짠다면 요번에 추가된 기능이나 라우트 파사드를 이용해서 좀 더 프로그램 답게(programmatically) 작성할 수 있지 않을까 싶다. GET 메소드만 쌱 조회해서 미들웨어에 auth 있나 없나 보고 그에 따라 샤샥.

이 글은 하루에 한 편씩 라라벨 관련 글을 메일로 보내드리는 [1일 1식 라라벨] 의 샘플 원고입니다. 조금 더 길어질 수도 짧아질 수도 있습니다만, 어느 정도 공들여 쓴 블로그 포스트 정도라고 생각해주시면 될 것 같습니다. 7월호 유료구독자를 모집하고 있습니다.