2012-04-25 9 views
5

Zapisuję wystąpienie modelu wykonujące niektóre akcje w funkcji modelu "beforeSave".
Chcę dodać niektóre błędy/komunikaty do modelu, a następnie pobrać je do kontrolera i pokazać użytkownikowi.
Jak daleko mam dwa pomysły jak zaimplementować to:Yii niestandardowe błędy modelu

  • użyć atrybutu manekin z funkcją ActiveRecord "addError": $this->addError("dummy"=>"my message"); To nie jest najlepszy sposób na to, jak będę musiał wymyślać nowe atrybuty obojętne.
  • Dodaj nową właściwość „custom_errors” do modelu i funkcja „addCustomErrors”

Może tam jest wbudowany w sposób to zrobić albo rozszerzenie?
W każdym razie, jak mogę to zrobić?

+4

Chcesz dodać komunikaty o błędach wewnątrz 'beforeSave'? To nie jest dobry pomysł, dlaczego tego nie zrobisz podczas sprawdzania poprawności? – Jon

+0

powoduje, że na przykład wysyłam plik i muszę sprawdzić, czy jest on przesłany na serwer, lub wykonuję inne czynności, takie jak czyszczenie pamięci podręcznej itd., Które nie mają nic wspólnego z walidacją. – lvil

+1

Wszystko to powinno się zakończyć pomyślnie * przed * Tobą zadzwoń 'zapisz' choć ... – Jon

Odpowiedz

6

można użyć addError(), ale nie ma potrzeby, aby się fałszywych atrybutów. Jeżeli błąd nie dotyczy niczego temat samego modelu wówczas robi coś złego: p

Więc w twoim przypadku będzie to coś jak:

$this->addError('file', 'Something happened I wasn\'t pleased with'); 

Jeśli są jakieś inne błędy atrybut atrybutu file, na który będą się umieszczać, więc nie musisz się martwić o nadpisanie.

+0

tylko jedno pytanie. jeśli chcę przekazać wiadomość, która nie jest błędem. załóżmy, że chcę zastąpić przesłany plik i chcę powiedzieć użytkownikowi, że został on zastąpiony. Jeśli zrobię to w addError, nie jestem pewien, który model zostanie zapisany, ponieważ ma błąd. – lvil

+0

Błąd dodawania nie powinien wpływać na zapisanie modelu. tak długo, jak to potwierdza, należy zapisać – Paystey

+0

Muszę potwierdzić, że rekord nie został utworzony o niewłaściwej porze dnia. Co ja robię źle? – Gherman

2

Nie widzę problemu tutaj. Po prostu użyj addError() http://www.yiiframework.com/doc/api/1.1/CModel#addError-detail. Model ten jest utrzymywany nawet po wywołaniu save() na nim, więc można po prostu zrobić coś takiego

yourController() 
{ 
    do_something(); 
    do_something(); 
    $model->save(); 
    $errors[]=do_what_you_have_to_do_to_define_the_errors_which_will_be_added(); 
    $model->addError(attribute, $errors); 
    $this->render(viewWhereTheErrorWillBeDisplayed, $model); 
} 
+0

Pytanie brzmi, jak dodawać błędy bez żadnego atrybutu: – Gherman