103호. 라라벨 6.8.0 새 기능 free

2019-12-27

안녕하세요. 오늘은 라라벨 6.8 새 기능을 정리했습니다.



패키지에서 커스텀 마크다운 메일 테마 사용 가능


이전까지는 뷰 파일의 경로가 아래에서 보는 것과 같이 'mail::themes'로 시작하도록 있었습니다.


# src/Illuminate/Mail/Markdown.php

return new HtmlString(($inliner ?: new CssToInlineStyles)
->convert(
$contents,
$this->view->make('mail::themes.'.$this->theme, $data)->render()
)
);

라라벨 외부 패키지에서 만든 테마도 사용할 수 있도록 이 부분을 고쳤다고 하네요. 그래서 패키지에서 mailcoach::mails.layout.mailcoach 같이 테마를 자유롭게 지정할 수 있게 됐습니다.


스파티의 프릭 반 더 하르텐이 요즘 열심히 Mailcoach라는 뉴스레터용 소프트웨어를 만들고 있는데, 외부 패키지에서 테마를 바꾸지 못하는게 불편했나봅니다. 필요하면 PR! 오픈 소스 짱이네요!


영감을 주는 문구 추가


inspire는 라라벨이 제공하는 커맨드 예제입니다. routes/console.php를 열어보면 아래와 같은 코드가 들어있습니다.


Artisan::command('inspire', function () {
$this->comment(Inspiring::quote());
})->describe('Display an inspiring quote');

Inspiring::quote()는 저장되있는 영감을 주는 문구 중 하나를 무작위로 골라서 가져오는 매서드인데, 문구를 몇가지 추가했다고 하네요. 테일러 오트웰이 직접 커밋했던데... 본인이 좋아해서 공유하고 싶은 문구들인가 봅니다. 하하


assertViewHas에 중첩된 배열을 점표기법으로 접근할 수 있는 기능 추가


assertViewHas()는 뷰가 가진 데이터를 검증하는 매서드입니다.


// controller

return Inertia::render('PageComponent', [
'user_name' => 'John Doe'
]);

이전까지는 위와 같이 응답을 내보내면 아래와 같이 테스트를 작성해야 했다고 합니다.


// test class

$this->get('/page')
->assertViewHas('page', [
'component' => 'PageComponent',
'url' => '/page',
'version' => null,
'props' => [
'user_name' => 'John Doe'
]
]);

이너시아를 저도 아직 안써봐서 정확히는 모르겠지만 컴포넌트를 지정하고 데이터를 전달하면 'page'라는 키의 props로 전달이 되는 것 같습니다.


테스트하고 싶은건 user_nameJohn Doe가 들어있는지를 확인하는 건데, 기존 방식으로 하면 불필요한 것들을 너무 많이 적어줘야 했습니다. 6.8.0 부터는 점표기법으로 중첩된 데이터에 바로 접근하여 다음과 같이 테스트 할 수 있습니다.


$this->get('/page')
->assertViewHas('page.props', [
'user_name' => 'John Doe'
]);

모델에 setRawAttribute 매서드 추가


setRawAttributes() 매서드로 변경자(Mutator)를 회피해서 속성을 변경할 수 있었습니다. 하지만 하나만 바꾸고 싶어도 모든 속성을 다 적어줘야해서 불편했다고 하네요.


이제는 setRawAttribute()로 속성을 하나씩 변경할 수 있고 세 번째 파라미터를 true로 설정하면 Original 속성도 함께 변경된다고 합니다.


컨트롤러 만들 때 force 옵션 사용 가능


이전까지는 컨트롤러를 잘못 만든 경우(예를 들어 --resource 플래그를 빼먹고 커맨드를 실행한다던가) 직접 파일을 지우고 다시 만들어야 했습니다.


이제는 --force 옵션을 이용해서 같은 이름의 컨트롤러가 있어도 이를 무시하고 다시 만들 수 있게 되었습니다.


resource::collection()에 배열 전달 가능


이전까지는 resource::collection()에 컬렉션만 넘겨줄 수 있었는데, 이제는 배열도 넘겨 줄 수 있게 되었습니다.


JsonResponse에 ArrayAccess 구현


이전까지는 가공되지 않은 JSON 페이로드를 다루고 싶으면 original() 매서드를 써야했는데, 이제는 그냥 접근하면 된다고 합니다.



모델을 만들 때 시더도 만드는 능력 추가


아래와 같이 -s 혹은 --seed 옵션을 추가해서 모델을 만들면 시더가 함께 만들어집니다.


php artisan make:model {모델명} -s 

php artisan make:model {모델명} --seed

어느새 2019년 마지막 금요일이네요. 뭔가 밤에 나가서 놀아야 할 것 같은 기분입니다. ㅎㅎ 무얼하시든 재밋는 금요일 밤이 되시길 바라며 이만~


1일 1식 라라벨 103호

2019년 12월 27일


이현석

메쉬 코리아 개발자. 바쁜 팀장님 대신 알려주는 신입 PHP 개발자 안내서를 쓰고, 클린 아키텍처 인 PHP를 번역했습니다. 2020년에 출간될 Laravel Up & Running 2nd Edition을 번역하고 있습니다.