[태그:] Modern PHP

  • PHP 화살표 함수(arrow function) 이용시 주의사항

    한 줄 짜리 익명함수는 화살표 함수로 대체하면 코드가 깨끗해지는 느낌이라 요즘 자주 사용하고 있습니다. 특히 클로저를 쓰지 않고도 외부 변수를 사용할 수 있는게 편리하더라고요. 하지만 컬렉션의 아이템을 하나씩 처리하면서 외부 변수를 조작하려고 아래와 같은 스타일의 코드를 작성했더니 $someCollection가 변하지 않더군요. 알고보니 원래부터 안되는 것이었습니다. (매뉴얼 참고) Example #4 Values from the outer scope cannot be […]

  • 라라벨, Artisan::output()이 빈 문자열을 반환한다면

    아티즌 커맨드를 테스트하기 위해 Artisan::output() 을 호출하여 출력 내용을 확인하는 방식을 사용했었는데요. 라라벨 버전을 올리니 갑자기 테스트가 깨졌습니다. 디버깅을 해보니 Artisan::output()이 빈 문자열을 반환하더군요. 원인은 라라벨 5.7부터 콘솔 테스트 기능이 강화되면서 기본으로 콘솔 출력을 모킹하도록 변경되었기 때문이었습니다. 기존 처럼 콘솔 출력을 확인하고 싶으면 아티즌 커맨드를 호출하기 전에 $this->withoutMockingConsoleOutput() 를 호출해주면 됩니다. 참고: Artisan::output() returns empty […]

  • PSR-2 강제하기

    오랜만에 모던 PHP 유저 그룹에서 발표를 했습니다. 희대의 폭망 발표가 됐지만, 그래도 준비한 게 있으니 정리해서 정기모임 발표 자료 저장소에 올려두었습니다. 제목은 PSR-2 강제하기입니다. 표준 스타일을 지키자고 합의를 했다고 해도, 매번 상대방이 코딩 표준을 지켰는지 확인하는 건 번거로운 일이죠. 책을 쓰면서 조사하다보니 코딩 표준을 지키지 않으면 커밋을 못하도록 하는 아주 간단한 방법이 있어서 소개해봤습니다. PSR-2 강제하기 […]

  • ORM 좋네요 좋아

    Eloquent ORM을 이용하여 아래의 데이터를 조회하기 위한 코드를 작성했습니다. A가 가진 모든 B들과 그 B들이 가진 모든 C들 중 A와 관련 있는 것만 추린 것들과 그 C들이 가진 모든 D들 그 결과 아래와 같은 코드가 나왔어요. ORM에 익숙한 분들은 이게 뭐? 하시겠지만 저는 굉장히 놀랬습니다 하하. 새삼 ORM에 더 익숙해지면 정말 편리해지겠구나 하는 생각이 드네요. […]

  • Laravel 마이그레이션 작성시 index 존재 여부 확인하는 방법

    Laravel에 테이블이나 컬럼이 존재하는지 확인하는 메소드는 있는데 index 존재 여부를 확인하는 메소드는 지원하지 않아서 다소 아쉬운 면이 있었습니다. 찾아보니 doctrine schema manager 를 사용하면 확인이 가능하더군요. Laravel로 마이그레이션 작성해보신 분들은 아래 예제 코드 보시면 바로 이해가 되실거에요. 아마 doctrine/dbal 패키지를 설치가 필요할 거에요.(확인해보진 않았습니다 ^^ 어차피 renameColumn 하려면 필요하니까 걍 설치 고고) Schema::table(‘articles’, function($table) { […]

  • Laravel 컨트롤러 테스트 작성 요령

    테스트를 작성할 때 무엇을 테스트 할 것인지를 결정하는 것이 참 어려운 것 같습니다. Jeffrey Way 의 조언을 따르니 컨트롤러 테스트 작성에 꽤 도움이 되네요. “Controller tests should verify responses, ensure that the correct database access methods are triggered, and assert that the appropriate instance variables are sent to the view.” 다음에서 발췌: JeffreyWay. ‘Laravel Testing […]

  • Laravel 테스트 작성중 POST로 리퀘스트 전송시 응답으로 200이 아닌 500이 온다면

    csrf 토큰 때문입니다. app/Http/Middleware/VerifyCsrfToken.php 를 public function handle($request, Closure $next) { if (‘testing’ !== app()->environment()){ return parent::handle($request, $next); } return $next($request); } 이렇게 수정해서 test 환경에서는 토큰을 확인하지 않도록 해주는 방법이 있습니다. 다른 더 좋은 방법들도 있을거 같아요. 좀 찾아봐야겠습니다. ㅎㅎ    

  • Codeception 을 이용한 인수테스트 기초 발표자료 공유

    어제 XE 오픈 세미나에서 발표했던 자료를 공유해봅니다. ‘테스트 자동화’ 하면 뭔가 되게 어려울 것 같은 느낌이지만 막상 써보면 엄청 사용하기 쉬우니 한 번씩들 사용해보세요. 🙂

  • MAMP 3.1로 업데이트 이후 Codeception 실행시 PDO 생성이 안되는 경우

    엊그제까지만 해도 멀쩡히 동작하던 Codeception이 갑자기 PDO 생성이 안된다는 예외를 발생시키더군요. [CodeceptionExceptionModule] (Exception in Db) SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using password: YES) while creating PDO connection 원인은 MAMP 업데이트 였는데, 아마도 MAMP가 업데이트 되면서 기본값으로 Mysql에 네트워크 접속을 허용하지 않았기 때문인 것으로 보입니다. 해결책은 두가지로 보이는데요 하나는 MAMP에 네트워크 접속을 허용해주는 것이고 […]

  • Composer 인스톨시 Discard changes 를 자동으로 처리하는 방법

    배포를 자동화하려면 composer install도 자동으로 완료되어야 합니다. composer install 을 하다보면 자주는 아니지만 가끔씩 discard-changes 에 대해 어떻게 처리를 할지 입력하도록 요구 받는데요, 이때 값을 입력해주지 않으면 더이상 패키지가 업데이트가 진행이 되지 않습니다. discard-changes 가 발생해도 배포가 정상적으로 이뤄질 수 있도록 하기 위해서는 아래와 같이 composer.json에 discard-changes 옵션을 넣어주시면 됩니다. { “config”: { “discard-changes”: true […]