Error: expression is not allowed as field default value

inhalin·2021년 5월 2일
0

Laravel

목록 보기
3/7

내용

expression is not allowed as field default value

class 파일에서 함수 표현식을 상수로 정의하려고 했더니 위와 같은 에러메세지가 나왔다.

말 그대로 필드 기본값으로는 표현식을 쓸 수 없기 때문에 생긴 에러다.

https://www.php.net/manual/en/language.oop5.constants.php

해결법

  1. 생성자

https://stackoverflow.com/questions/54417100/expression-is-not-allowed-as-field-default-value-on-oop

https://stackoverflow.com/questions/35037368/expression-is-not-allowed-as-field-default-value

/**
 * 생성자에서 프로퍼티값 선언하기
 */
__construct() {
    parent::__construct();
    $this->career_levels = CareerLevel::all()->pluck('name', 'id')->toArray();
}

문제점 : 인스턴스 생성시마다 디비 쿼리가 실행됨

  1. 프로퍼티 오버로딩

__isset() 매직 메서드로 체크해서 해당 프로퍼티가 저장소에서 처음 사용되고, 존재하지 않을때만 디비에서 1회 가져오게 하기

https://www.php.net/manual/en/language.oop5.overloading.php#object.isset

컨트롤러

/**
 * 선언되지 않은 프로퍼티를 디비에서 가져오기
 */
public function __isset(string $name): bool
{
    if ($name === 'career_levels') {
        $this->career_levels = CareerLevel::all()->pluck('name', 'id')->toArray();
    }
    return isset($this->{$name});
}

뷰파일

<select id="career_levels" name="career_levels" required>
    <option>{{  __('Select') }}</option>
    @foreach ($careerLevels as $careerLevel)
    <option value="{{ $careerLevel->id }}" 
                  {{ __isset($careerLevel->id) ? 'selected' : '' }}> 
        {{ $careerLevel->name }} 
    </option>
    @endforeach    
</select>

0개의 댓글