laravel에서 fill 메소드는 Eloquent 인스턴스에 속성을 할당하는 메소드입니다. 이 메소드는 이 메소드가 호출될 때 현재 모델에 해당하는 프런트 엔드에서 전송되는 중복 필드를 필터링하는 데 사용되는 것으로 이해될 수 있습니다. 모델은 첫 번째 상태로 감지되며, 모델은 채울 수 있는 배열의 설정에 따라 다른 상태에 있습니다.
이 기사의 운영 환경: Windows 10 시스템, Laravel 버전 6, Dell G3 컴퓨터.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!