Laravel Simple API

Laravel의 document엔 간단하게 api를 구성할 수 있는 방법이 나와있다. [doc] 하지만 문서를 따라하는것 만으로는 이해가 힘들기도 했었고, 위에 내용데로 따라 만든 api_token을 어떻게 써야할지도 햇갈려 따로 정리해둔다. 문서대로 users 테이블에 api_token 컬럼이 생성되었으며, str_random() 등과 같은 함수로 임의의 token이 들어간 상태에서 진행되었다고 가정한다. Middleware (‘auth:api’) “auth:api” – ‘auth’ 미들웨어와 ‘api’ poilcy를 사용한다는 뜻이며, 해당 미들웨어가 …

Laravel manual pagination

Laravel에서 groupBy와 함께 paginate을 쓸 땐 수동으로 Paginator 생성하여 사용하는 것을 권장하고 있다. [docs] 나의 경우엔 groupBy 이후에 paginagte()함수를 실행시키면 column을 찾을 수 없다는 에러가 발생하여 어쩔수 없이 수동으로 생성해야한다. 수동으로 생성할땐 use Illuminate\Pagination\Paginator; 를 사용한다. Paginator의 파라미터는$todoItems : array_slice 혹은 slice 메소드로 분리된 배열$perPage : 페이지당 표시할 개수$currentPage(null) : 현재 페이지$option([]) : 옵션 위의 코드를 …

Laravel $model->relation Vs. $model->relation()

TL;DR $model->relation()은 모델 객체(object)를 반환$model->relation은 relation의 결과값을 반환 Laravel에선 모델간의 관계(relation)을 편리하게 사용할수 있는 기능을 제공한다.[docs]외래키(foreign_key)를 이용하여 해당 데이터에 해당되는 값을 가져올 수 있는 편리한 기능이다. 다음과 같은 구조의 DB가 있다고 생각해보자. User : table – id : integer (auto_increase, primary_key) – name : string – password : string Post : table – id : …

Laravel 5.8 PHPunit test setUp, tearDown error

갑작스레 Laravel을 5.8로 업데이트 하고나서 잘만 동작하던 test가PHP Fatal error: Declaration of Tests\Feature\Test::setUp() must be compatible with이런 에러를 벹으며 동작하지 않았다. github, laracast등에 올라온지 꾀 된 내용인데 laravel upgrade 가이드엔 test 관련 표기가 없어 당황하던 도중 github에서 방법을 찾게 되었다. (작성일 기준으론 upgrade 가이드에 표시되지 않았을뿐 현재는 표시되어있다.) 해결 방법은 setUp과 tearDown 메소드에 반환형을 :void로 …

Laravel FormRequest Class without Redirect (response json)

Laravel에서 FormRequset 클레스를 만들어 Validate를 할때 유효하지 않은 경우 무조껀 이전 페이지로 Redirect를 시키게 된다. 물론 헤더에 X-Requested-With : XMLHttpRequest 등을 넣어 json으로 응답 받을 수 있지만, 테스트 과정에도 그렇고 아무 제약없이 api를 제공하고 싶을 때 리다이렉트 응답은 꽤나 신경 거슬리게된다. 과거의 Laravel에선 public function response() 를 사용하여 응답을 정해줄 수 있지만 왜인지 5.5 이후로 해당 기능은 …

Laravel phpunit Filestyem fake disk 설정

Laravel의 phpunit에서 fileupload를 테스트하기위한 공식 문서의 예제를 보면 Storage::fake(‘avatars’); 부분을 설정해 해당 disk를 사용하려고 해도$request->file(‘test’)->store(‘test_files’);이렇게 작성된 Controller를 통해 저장하게되면 storage/app/test_files에 저장되며, Storage::disk(‘avatars’)->assertExists($file->hashName()); 가 계속 파일이 없다고 표시된다. phpunit.xml 수정 <env name=”FILESYSTEM_DRIVER” value=”fake-local”/> 을 추가하고Storage::fake(‘fake-local’);, Storage::disk(‘fake-local’)로 변경해주면,storage/framework/testing/disks/fake-local/test_files/에 저장되며 test가 정상적으로 진행된다.

Laravel factory state

Laravel 팩토리[doc] 라라벨에서는 Factory를 통해 Model의 데이터에 가짜(Fake)데이터를 생성해 주는 기능이 존재한다. 이를 통해서 PHPUnit과 같은 Test를 진행할 때 원하는 Type의 데이터가 들어가지는지 테스트 하는 등의 기능을 제공하며,Database Seeding을 통해 Fake 데이터를 넣어 개발 및 테스트를 조금 더 용이하게 해준다. UserFactory Laravel에서 기본적으로 설정해 주는 UserFactory를 사용하면factory(User::class)->create()만으로 Fake 유저를 자동으로 생성해 준다. 만약, factory를 자동으로 …

[Laravel] Laravel Best Practices

해당 글은 임영록(cherrypick) 님이 번역하신 Laravel Best Practices를 정리겸 옮겨 적은 것입니다. [ver. 2018-11-19] 번역: 한국어 (by 임영록(cherrypick)) Русский(by alexeymezenin) Português (by jonaselan) Tiếng Việt (by Chung Nguyễn) 이 문서가 도움이 되셨다면 현재 레퍼지토리뿐만 아니라, 원본 레퍼지토리도 한 번씩 star를 눌러주시면 감사하겠습니다. 😀  원본 레퍼지토리: https://github.com/alexeymezenin/laravel-best-practices 이 문서는 라라벨 프레임워크에서 객체지향 디자인의 5원칙(SOLID), 패턴 등을 적용한 내용이 아닙니다. 라라벨 프레임워크로 프로젝트를 진행하면서 놓칠 수 있는 Best …