>PHP 프레임워크 >Laravel >Laravel의 채우기 방법을 사용하는 방법

Laravel의 채우기 방법을 사용하는 방법

WBOY
WBOY원래의
2022-06-06 15:33:233720검색

laravel에서 fill 메소드는 Eloquent 인스턴스에 속성을 할당하는 메소드입니다. 이 메소드는 이 메소드가 호출될 때 현재 모델에 해당하는 프런트 엔드에서 전송되는 중복 필드를 필터링하는 데 사용되는 것으로 이해될 수 있습니다. 모델은 첫 번째 상태로 감지되며, 모델은 채울 수 있는 배열의 설정에 따라 다른 상태에 있습니다.

Laravel의 채우기 방법을 사용하는 방법

이 기사의 운영 환경: Windows 10 시스템, Laravel 버전 6, Dell G3 컴퓨터.

laravel의 fill 메소드 사용 방법

fill 메소드는 Eloquent 인스턴스에 속성을 할당하는 메소드입니다.

fill 메소드를 클릭하고 소스 코드를 먼저 살펴보겠습니다. array

여기서 사용하는 버전은 다음과 같습니다. Laravel 5.5 최신 버전에서는 읽기의 편의를 위해 주석 프레임워크가 삭제되었습니다

public function fill(array $attributes)
{
    $totallyGuarded = $this->totallyGuarded();
    foreach ($this->fillableFromArray($attributes) as $key => $value) {
        $key = $this->removeTableFromKey($key);
        if ($this->isFillable($key)) {
            $this->setAttribute($key, $value);
        } elseif ($totallyGuarded) {
            throw new MassAssignmentException($key);
        }
    }
    return $this;
}

우선 Laravel이 먼저 자체적인 totalGuarded 메소드를 호출하는 것을 볼 수 있습니다: function

public function totallyGuarded()
{
   return count($this->getFillable()) == 0 && $this->getGuarded() == ['*'];
}

이 방법의 효과를 볼 수 있습니다. 자체적으로 채울 수 있고 보호된 상태를 얻은 다음 모두 일괄 할당할 수 없는 상태인지 확인하고 마지막으로 부울 값을 반환합니다. 지금 바로 fill 메소드로 가서 디자인을 살펴보세요

다음은 foreach 루프이지만, 루프 전에 Laravel은 들어오는 할당 속성에 대해 fillableFromArray 메소드를 실행합니다. 코드

// 返回一个 True or False 的布尔值
// 若是未设置 fillable 与 guarded,则会返回 True (注意,在这种状况下,此 `Model` 是不容许批量赋值任何属性的哦)
// 反之则返回 False
$totallyGuarded = $this->totallyGuarded();

를 살펴보세요. 메소드는 채울 수 있는 배열에 값을 정의했는지 여부를 감지합니다. 값이 정의되어 있으면 채울 수 있는 값이 속성과 교차하는 값을 반환합니다. 그렇지 않은 경우에는 속성 자체 이벤트를 반환한 다음 fillableFromArray를 호출하여 반환합니다. 매개변수를 처리합니다. 반환되는 유일한 값은 일괄 할당을 허용하는 속성입니다(정의된 경우)ip

첫 번째 줄을 반복하고 먼저 RemoveTableFromKey를 사용하여 매개변수의 키를 처리하고 키에서 테이블 이름을 삭제합니다. . 이 메서드는 너무 많이 설명되지 않으며 단지 문자열 분할 및 값 rem

protected function fillableFromArray(array $attributes)
{
    if (count($this->getFillable()) > 0 && ! static::$unguarded) {
        return array_intersect_key($attributes, array_flip($this->getFillable()));
    }
    return $attributes;
}

을 위한 함수일 뿐입니다. 아래를 보면 Laravel은 이 속성이 채워질 수 있는지 확인하기 위해 채워질 각 속성에 대해 isFillable 메서드를 호출합니다. 소스 코드를 살펴보세요:

$key = $this->removeTableFromKey($key);

이 방법에서 Laravel 먼저 이 모델에 대해 가드가 비활성화되었는지 판단합니다. 이 모델에 대해 가드가 활성화되지 않은 경우 True가 직접 반환됩니다.

public function isFillable($key)
{
   if (static::$unguarded) {
       return true;
   }
   if (in_array($key, $this->getFillable())) {
       return true;
   }
   if ($this->isGuarded($key)) {
       return false;
   }
   return empty($this->getFillable()) &&
       ! Str::startsWith($key, '_');
}

가드가 활성화되면 이 속성이 채울 수 있는 배열에 있는지 판단됩니다. 존재하는 경우 True를 반환합니다.

if (static::$unguarded) {
    return true;
}

이 속성이 채울 수 있는 배열에 없으면 Laravel은 이를 다시 확인합니다. 보호된 배열에 속성이 존재하는 경우 이 속성은 일괄 할당할 수 있는 속성이 아닙니다. 그러면 바로 False를 반환합니다

if (in_array($key, $this->getFillable())) {
    return true;
}

위의 항목 중 어느 것도 충족되지 않으면 Laravel이 최종적으로 여부를 결정합니다. 채울 수 있는 배열이 비어 있고 이 속성은 _로 시작합니다. 그런 다음 부울 값

if ($this->isGuarded($key)) {
    return false;
}

을 반환하고 채우기 메서드로 돌아갑니다. 다음으로, 이 속성이 isFillable 메서드에 의해 필터링된 경우 이 속성을 자체에 할당합니다(제한된 제한으로 인해). 이후에는 setAttribute 메소드에 대해 자세히 다루지 않겠습니다~),

return empty($this->getFillable()) && ! Str::startsWith($key, '_');

isFillable 메소드로 필터링되지 않은 경우 Laravel은 자신의 모델이 속성의 일괄 할당을 제한하지 않는 상태인지 확인합니다. 그렇지 않다면 라라벨은 바로 Exception을 발생시킵니다

$this->setAttribute($key, $value);

모든 속성을 감지하고 할당한 후 라라벨은 스스로를 반환합니다

return $this ;

분석이 완료되면 위가 fill 메소드의 소스코드입니다~ 그리고 마지막으로 a summary

fill 메소드를 호출하면 Laravel은 먼저 현재 모델의 상태를 감지하고,

채울 수 있는 배열을 설정하면 보호된 배열이 설정되지 않으면 이 모델은 채울 수 있는 상태가 됩니다. 지정된 속성만 배치로 할당

채울 수 있는 배열을 설정하지 않고 보호된 배열만 설정하면 이 모델은 어떤 속성이라도 배치로 할당할 수 있는 상태가 됩니다

그렇기 때문에 여기서는 논하지 않겠습니다. 채울 수 있는 배열과 보호된 배열을 동시에 설정하는 것은 Laravel

에서 금지하기 때문입니다. 그런 다음 채울 수 있는 배열과 채울 수 있는 배열의 교차점을 얻기 위해 fillableFromArray를 호출하세요. 채울 수 있는 배열을 정의하지 않거나 Guard를 비활성화하면 이 메서드가 직접적으로 수행됩니다.

속성을 반환하면 Laravel은 반환된 배열에 대해 루프를 만듭니다. 이 루프에서 Laravel은 각 속성에 대해 isFillable 메서드를 호출하여 해당 속성이 이 메서드에 의해 감지되지 않는지 확인합니다. 채울 수 있는 배열에 있고 보호된 배열 세트가 없거나 보호된 배열에 존재하는 경우) Laravel은 현재 모델이 지정된 속성만 일괄 할당할 수 있는 상태인지 여부를 감지합니다. 그렇다면 Exception
을 직접 발생시킵니다.

그러면 Laravel은 할당 작업을 완료한 후 $this를 반환합니다

[관련 권장 사항:

laravel 비디오 튜토리얼

]

위 내용은 Laravel의 채우기 방법을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.