저는 yii2 프로젝트를 가지고 있는데, gii를 사용하여 account라는 모델에 대한 crud 연산을 생성했습니다.yii2 모델에 함수를 추가하는 방법은 무엇입니까?
이제 데이터베이스에서 레코드를 삭제하지 않고 대신 삭제 플래그를 지정하고 변경 사항을 저장할 위치가 확실하지 않도록 삭제 기능을 변경 (또는 새 기능 추가)하고 싶습니다. .
저는 yii2 프로젝트를 가지고 있는데, gii를 사용하여 account라는 모델에 대한 crud 연산을 생성했습니다.yii2 모델에 함수를 추가하는 방법은 무엇입니까?
이제 데이터베이스에서 레코드를 삭제하지 않고 대신 삭제 플래그를 지정하고 변경 사항을 저장할 위치가 확실하지 않도록 삭제 기능을 변경 (또는 새 기능 추가)하고 싶습니다. .
컨트롤러의 actionDelete
에 이것을 추가하십시오.
$model->deleted = 1;
$model->save();
당신은 beforeDelete()
이벤트를 재정 의하여, 모델의 코드 자체에서이 작업을 수행해야합니다. 이런 식으로 뭔가 :
public function beforeDelete()
{
if (parent::beforeDelete()) {
$this->deleted = true;
$this->save();
return false;
} else {
return false;
}
}
(내 기억하지 테스트에서 를 작성하지만, 작동합니다)
예, 컨트롤러에서 설정을 신경 쓰지 말고 메모리에 유지해야합니다. MVC 패턴에 따라 더 정확합니다. 그러나 진실은 더 짧고 옳은 것이기 때문에 많은 사람들이 Alex의 대답을 계속 사용하게 될 것입니다. – arogachev
짧고 쉬운 답변이 항상 최선의 것은 아닙니다! :> 나는 단지 생각을 스릴 뿐이며, 장래에 그러한 조직적인 프로젝트에서 누군가가이 코드를 새로운 컨트롤러에 복사하는 것을 잊어 버리고 실제로 플래그를 변경하지 않고 실제로 레코드를 삭제함으로써 전체 어플리케이션을 망칠 수 있습니다! :> 또한,이 솔루션은 Yii의 강력한 이벤트 시스템을 사용하며,이 기능을 사용하는 많은 PHP 프레임 워크가 아닙니다. 좋아, 나는 인정해야한다, 나는 단지 _love_ Yii! :> – trejder
네, 맞습니다. 반복적 인 코드를 행동에 넣고 필요한 곳에 부착 할 수 있습니다. – arogachev
당신을 감사합니다! @Alex – tareq
이것은 잘못된 접근입니다 ([내 대답] (http://stackoverflow.com/a/29366838/1469208) 참조). 모델 자체에서이 작업을 수행해야합니다. 컨트롤러에서 (a) MVC 디자인 패턴을 분해하지 않고 (b) 모든 컨트롤러에서 코드를 반복하는 대신 모든 컨트롤러 (및 다른 방법)에서 이러한 변경을 사용할 수 있도록해야합니다. 어디에서나 모델을 다루는 곳입니다. 이러한 종류의 작업은 컨트롤러 레이어에 완전히 보이지 않아야합니다. (이 코드를 단일 컨트롤러에 추가하지 않으면) 모든 것이 망가지기 때문에 모델에서이 작업을 구현해야합니다. – trejder