Composer “Could not load package ezsystems/ezplatform” Error

어제 저녁 laravel 8 업데이트 소식과 함께 테스트를 하려고 했는데, 갑작스럽게 composer에서

  [RuntimeException]
  Could not load package ezsystems/ezplatform in https://packagist.org: UnexpectedValueException] Could not parse version constraint dev-load-varnish-only-when-used as ^2.0@dev: Invalid version string "^2.0@dev"

  [UnexpectedValueException]
  Could not parse version constraint dev-load-varnish-only-when-used as ^2.0@dev: Invalidversion string "^2.0@dev"

이런 에러가 표시되면서 모든 프로젝트에서 작동이 되지 않았다.
진짜 laravel 지웟다 다시깔고, os 도 다시 설치해보다가 도저히 방법을 못찾겟던 와중

https://stackoverflow.com/questions/63801165/composer-could-not-load-package-invalid-version-string

composer 1.10.11이 망가졌다고 한다..
composer self-update를 통해 문제를 해결했다. (내 5시간..)

Laravel 6 to 7 Upgrade

3월 3일 laravel 7이 정식 릴리즈 되면서 기대하던 blade-x, stub, custom casts 등과 같은 기능들이 추가되었다.

지금 열심히 modern php 멤버 분들께서 도큐먼트를 번역중이시니 함께 번역을 하는것은 어떨가 싶다.

이번 글에선 Laravel 6에서 7으로 업데이트할 때 수정되야 하는 사항들을 간략히 정리해보겠다.

composer.json

  1. “php” 의 버전을  “^7.2.5”,
  2. “laravel/framework” 의 버전을 “^7.0″으로
  3. “nunomaduro/collision” 의 버전을 “^4.1″로
  4. “phpunit/phpunit” 의 버전을 “^8.5″로
  5. “facade/ignition” 의 버전을 “^2.0″으로

app/Exceptions/Handler.php

위에서 부터 순서대로
# 6.x
7.x

변경 사항이다.

<?php
# use Exception;
use Throwable;
// ...
# public function report(Exception $exception)
public function report(Throwable $exception)
// ...
# public function render($request, Exception $exception)
public function render($request, Throwable $exception)
// ...

위와같이 composer.json과 Handler.php 파일을 수정했다면
compsoer update를 통해 laravel 7으로 넘어가도록 하자!

[PHP] 폴더 내에 모든 파일을 autoload하는 방법

라라벨에서 custom helper 함수를 추가할 땐 “app/helpers/helper.php”와 같은 파일을 만들고 아래 json과 같이 그 파일을 composer.json에 “files”에 추가해주어야 한다.

"autoload": {
    "files": [
        "app/helper/helpers.php"
    ],
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},
"autoload-dev": {
    "psr-4": {
        "Tests\\": "tests/"
    }
},

다만 하나의 file을 추가할 때는 괜찮아 보이지만 만약 추가해야하는 custom helper가 많아질 수록 관리도 힘들고 일일히 추가해야 하는 번거로움도 있다.

이럴때 폴더 단위로 app/Helpers/* 와 같이 로드되면 좋겠지만 composer의 files는 단일 파일만을 지원하며 * 와같이 여러 파일을 불러오는 기능은 존재하지 않는다.
(다만 class 와 관련되어선 사용할 수 있는것같다, 아마 namespace를 이용하지 않을까…?)

이럴때 app/helper/include.php 파일을 생성한 뒤 아래와 같이 작성해 준 뒤,

<?php
$files = glob(__DIR__ . '/*.php');
if ($files === false) {
    throw new RuntimeException("Failed to glob for function files");
}
foreach ($files as $file) {
    require_once $file;
}
unset($file);
unset($files);

include.php 파일을 composer.json에 추가해준다.

"autoload": {
    "files": [
        "app/helper/include.php"
    ],
    "classmap": [
        "database/seeds",
        "database/factories"
    ],
    "psr-4": {
        "App\\": "app/"
    }
},
"autoload-dev": {
    "psr-4": {
        "Tests\\": "tests/"
    }
},

이후 composer dump-autoload 명령어를 통해 로드 해주면 app/helpers 폴더 안에 있는 모든 php 파일들에서 선언된 함수, 클래스들을 사용할 수 있다.