수정자는 모델의 가장 강력한 세 가지 "도구" 중 하나입니다. 이 글에서는 수정자의 사용법과 몇 가지 주의 사항을 요약하겠습니다.
수정자 정의
수정자의 기능은 모델 객체 데이터가 데이터베이스에 기록되기 전에 필요한 데이터 처리를 수행하는 것입니다. 수정자의 표준 정의는 다음과 같습니다.
public function setFieldNameAttr($value, $data) { // 对value值进行处理 data参数是当前全部数据 // 返回值就是实际要写入数据库的值 return $value; }
여기서 FieldName은 데이터 테이블의 field_name 필드(테이블 필드의 데이터 사양과 수정자 메서드는 사양을 정의합니다. 그렇지 않으면 오류가 발생합니다).
각 수식자는 원칙적으로 해당 필드의 데이터만 처리해야 하지만, 필요한 경우 동시에 여러 필드를 처리하는 것도 허용됩니다.
다음은 예시입니다
public function setBirthdayAttr($value, $data) { // 格式化生日数据 $birthday = strtotime($value); // 根据生日判断年龄 $age = getAgeByBirthday($birthday); // 赋值年龄数据 $this->setAttr('age', $age); return $birthday; } public function setAgeAttr($value,$data) { return floor($value); }
setAttr 메소드를 사용하는 이유는 연령 할당 작업이 별도의 수정자를 거칠 수 있도록 하기 위함입니다. 추가 수식어가 없으면
public function setBirthdayAttr($value, $data) { // 格式化生日数据 $birthday = strtotime($value); // 根据生日判断年龄 $age = getAgeByBirthday($birthday); // 赋值年龄数据 $this->data['age'] = $age; return $birthday; }
로 쓸 수도 있습니다. 모델 내부에 데이터 객체를 할당하면 모델의 내부 속성과 혼동되어 예측할 수 없는 결과가 발생하므로
$this->age = $age;
로 쓰면 안 됩니다. 모델.
특정 수정자에서 다른 필드를 수정할 수 있는 경우 추가로 수정해야 하는 필드 수정자가 할당되어 있어야 함(또는 수정자가 트리거됨)을 기억하세요.
호출 방법
수정자 메소드는 정의 사양에 따라 정의된 후 다음과 같은 상황에서 자동으로 호출됩니다.
·모델 객체
· 모델의 데이터 메소드를 호출하고 두 번째 매개변수로 true를 전달합니다.
·모델의 저장 메소드를 호출하고 배열 데이터를 전달합니다.
모델의 setAttr 메소드를 명시적으로 호출합니다.·
이 필드의 자동 완성을 정의합니다.예를 들어, User 모델은 setPasswordAttr 수정자 메소드를 정의합니다. public function setPasswordAttr($value, $data)
{
return md5($value);
}
이렇게 사용하면 데이터베이스에 저장된 비밀번호 필드의 값이 md5('생각') 이후의 값이 됩니다.
$user = User::get(1); $user->password = 'think'; $user->save();수정자를 사용하고 싶지 않지만 경우에 따라 데이터를 수동으로 제어하고 싶다면 다음 방법을 시도해 볼 수 있습니다.
$user = User::get(1); $user->data('password', md5('think')); $user->save();현재는 수식어로 처리되지 않습니다.
충돌 방지
많은 개발자는 수정자에 대해 자동 완성 자동(삽입 및 업데이트 포함)을 정의하는 것을 좋아합니다.protected $auto = ['password'];V5.1.27 이전 버전에서는 영리해 보이지만 매우 치명적인 실수입니다. 이전에 제공한 수정자 트리거 조건에 따라 수정자가 두 번 실행될 수 있으므로 피하세요. 이는 심각한 오류가 발생하여 모든 사용자가 등록 후 정상적으로 로그인할 수 없게 됩니다. 해결책은 값이 할당될 때마다 수정자가 자동으로 실행되므로 비밀번호 필드의 자동 완성 설정을 취소하는 것입니다. 할당이 없으면 비밀번호가 수정되지 않았음을 의미하며 비밀번호가 없습니다. 자동 완성. 자동 완성 필드는 일반적으로 양식에 없는 필드이며 일반적으로 시스템에서 자동으로 처리되는 필드입니다. V5.1.27 버전에서는 이 문제가 개선되었습니다. 모든 수정자는 한 번만 실행될 수 있으며 위의 문제는 더 이상 존재하지 않습니다. 그러나 이는 새로운 문제를 가져온 것 같습니다. 모델이 발생하면 데이터를 수정하고 싶을 수도 있습니다.
User::beforeUpdate(function($user) { $user->password = md5('think'); });는 모델 beforeUpdate 이벤트에서 데이터 값을 수정할 수 없음을 발견합니다. 그 이유는 모델의 수정자가 첫 번째 할당 중에 실행되었고 두 번째 할당 시 유효하지 않기 때문입니다(아니오가 실행되지 않음). 다시). 해결책은 데이터 할당 작업을 위해 수정자를 호출하지 않고 앞서 언급한 데이터 메서드를 사용하는 것입니다.
User::beforeUpdate(function($user) { $user->data('password', md5('think')); });물론 더 나은 제안은 수정자, 자동 완성 및 모델 이벤트의 데이터 처리 메커니즘을 계획하는 것입니다. 필드에 대해 동시에 데이터를 수정하기 위해 여러 메커니즘을 사용하지 마십시오. 데이터베이스에 기록된 데이터는 수정자를 통해 작성됩니다.
자동 유형 변환
수정자가 데이터에 대한 유형 변환만 수행하는 경우 수정자를 정의할 필요가 없으며 필드 유형을 직접 정의하면 됩니다.public function setScoreAttr($value, $data) { return (float) $score; }위 수식자 방식은
protected $type = [ 'score' => 'float', ];로 직접 변경할 수 있습니다. 수식자와 필드 유형을 동시에 정의하면 수식자가 우선 적용됩니다. 유형 정의는 간단한 데이터 유형을 정의할 수 있을 뿐만 아니라 몇 가지 추가 용도도 있습니다. 예를 들어 json 유형, 배열 유형 및 객체 유형은 JSON 직렬화되고 직렬화 유형은 데이터를 직렬화합니다. PHP 중국어 웹사이트에는 무료
ThinkPHP 입문 튜토리얼
이 많이 있습니다. 누구나 배울 수 있습니다! 이 기사는 https://blog.thinkphp.cn/817548에서 복제되었습니다.
위 내용은 ThinkPHP: 모델을 위한 세 가지 강력한 도구 중 두 번째(수정자)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사는 ThinkPhp의 내장 테스트 프레임 워크에 대해 논의하여 장치 및 통합 테스트와 같은 주요 기능과 조기 버그 감지 및 개선 된 코드 품질을 통해 응용 프로그램 신뢰성을 향상시키는 방법을 강조합니다.

기사는 실시간 주식 시장 데이터 피드에 ThinkPHP를 사용하여 설정, 데이터 정확도, 최적화 및 보안 측정에 중점을 둡니다.

이 기사는 서버리스 아키텍처에서 ThinkPHP를 사용하기위한 주요 고려 사항에 대해 설명하고 성능 최적화, 무국적 설계 및 보안에 중점을 둡니다. 비용 효율성 및 확장 성과 같은 혜택을 강조하고 도전 과제를 해결합니다.

이 기사에서는 ThinkPHP 마이크로 서비스에서 서비스 검색 및로드 밸런싱 구현, 설정, 모범 사례, 통합 방법 및 권장 도구에 중점을 둡니다. [159 문자]

ThinkPhp의 IOC 컨테이너는 PHP apps.character 수 : 159의 효율적인 종속성 관리를위한 게으른 하중, 맥락 바인딩 및 메소드 주입과 같은 고급 기능을 제공합니다.

이 기사는 ThinkPhp를 사용하여 실시간 협업 도구를 구축하고 설정, WebSocket 통합 및 보안 모범 사례에 중점을 둡니다.

ThinkPhp는 가벼운 디자인, MVC 아키텍처 및 확장 성을 통해 SaaS 앱에 혜택을줍니다. 다양한 기능을 통해 확장 성을 향상시키고 개발 속도를 높이며 보안을 향상시킵니다.

이 기사는 설치, 구성, 작업 관리 및 확장성에 중점을 둔 ThinkPhp 및 RabbitMQ를 사용하여 분산 작업 큐 시스템을 구축합니다. 주요 문제는 고 가용성 보장, 손상과 같은 일반적인 함정을 피하는 것입니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
