[PHP] Multiple for(each), while escape

TL;TR; PHP는 중접된 반복문을 원하는 개수만큼 탈출할 수 있는,break 2;와 continue 2;를 지원한다. 다중 for문 PHP가 아니더라도 어디에든 다중 for문을 사용하는 것을 본적이 있을 것이다.물론, for문이 중첩되어있는걸 보면 경기를 일으키는 사람도 있지만,어쩔 수 없이 써야할수도 있고, 지식의 한계와 마감의 촉박함이 다중 for문을 만들어 낼 수 있는 부분은 어쩔수 없다. 뭐 그렇다치고, 모던 PHP그룹을 보던중 신기한(?) …

[PHP] Distinction Null and Undefined

TL;TR <?php array_key_exists(‘value’, get_defined_vars()) ?> 대게 주의에선 PHP에선 Null과 Undefined를 구별하지 못한다고 알려져 있다.나 또한 Null과 Undefined를 구별할 수 있는 방법이 없다고 생각했지만, 성능상의 이슈를 제외하고, PHP에서도 Null과 Undefined를 구분 할 수 있다. PHP에서 변수의 유효성을 확인하기 위해 가장 많이 사용되는 함수인 isset은 해당변수가 ‘정의 되어 있지 않’거나 변수의 값이 ‘Null’인 경우에 false를 반환한다. 즉, …

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가 정상적으로 진행된다.