실패 작동하지 않습니다. 모델을 저장하려고하면 항상 비어 있습니다 ($workspace->save()
). 유효성 검사가 실패했기 때문에 저장할 수 없습니다 ("created_at는 비워 둘 수 없습니다"). 이 클래스에는 특별한 것이 없습니다. 아무것도 재정의되지 않습니다. 무엇이 문제 일 수 있습니까?TimestampBehavior 내가 <a href="http://www.yiiframework.com/doc-2.0/yii-behaviors-timestampbehavior.html" rel="nofollow noreferrer">TimestampBehaviour</a> 다음과 같은 클래스가 있기 때문에 검증
-2
A
답변
0
유효성 검사 규칙 때문에 문제가 발생했습니다. 예기치 않은 생각입니다. 모든 것이 정확하다고 생각했기 때문입니다.
public function rules() {
return [
[['id', 'name', 'created_at'], 'required'],
[['id'], 'int'],
[['name'], 'string', 'max' => 100],
[['created_at' ], 'datetime'],
];
}
created_at
가 필요이 아니어야합니다 - 그게 문제였다 :이 내 규칙이었다.
심지어 documented있다 : 속성 값이 동작에 의해 자동적으로 설정 될 것이기 때문에
는 그들은 통상 사용자 입력되므로 즉 created_at 및 updated_at가 나타나지한다 검증되지 않아야 rules() 메서드 .
$workspace->save()
이 실행되면 첫 번째 단계는 유효성 검사입니다. 그리고 그 단계 후에 만 EVENT_BEFORE_INSERT/EVENT_BEFORE_UPDATE이 트리거되어 TimestampBehaviour가 지정된 필드를 채 웁니다. 그리고 이것은 검증이 성공했을 때만 발생합니다! (만약 var_dump하면 빈 created_at 볼 수 있습니다.) 너무 늦게, 유효성 검사가 이미 자리를 잡고 유효성 검사 오류가있어.
규칙에서 created_at을 제거하는 것이 좋습니다. 물론 다른 접근법도 가능합니다 (예 : 유효성 검사를 끄거나 save()가 호출 될 때 유효성을 검사해야하는 속성 전달).
0
추가 울부 짖는 소리
public function behaviors()
{
return [
[
'class' => TimestampBehavior::className(),
'createdAtAttribute' => 'create_time',
'updatedAtAttribute' => 'update_time',
'value' => new Expression('NOW()'),
],
];
}
같은 행동과 모델 클래스의 안전 기록에 추가합니다.
public function rules()
{
return array(
array('create_time,update_time', 'safe'),
);
}