2012-04-25 18 views
5

Sto salvando un'istanza di modello che esegue alcune azioni nella funzione del modello "beforeSave".
Desidero aggiungere alcuni errori/messaggi al modello e quindi ottenerli nel controller e mostrarli all'utente.
Per quanto ho due idee di come implementare questa:Errori del modello personalizzato Yii

  • utilizzare un attributo fittizio con funzione di ActiveRecord "addError": $this->addError("dummy"=>"my message"); Non è il modo migliore di farlo come dovrò inventare nuovi attributi fittizi.
  • aggiungere una nuova proprietà "custom_errors" al modello e funzione "addCustomErrors"

Forse c'è un modo integrato di farlo o un'estensione?
Ad ogni modo come posso farlo?

+4

Si desidera aggiungere messaggi di errore all'interno di 'beforeSave'? Non è una buona idea, perché non lo fai durante la convalida? – Jon

+0

perché ad esempio carico un file e devo verificare che sia caricato sul server, o eseguo altre azioni come svuotare la cache e così via che non hanno nulla a che fare con la convalida – lvil

+1

Tutto questo dovrebbe essere stato completato con successo * prima * tu chiamare 'save' però ... – Jon

risposta

6

È possibile utilizzare l'addError(), ma non c'è bisogno di recuperare gli attributi falsi. Se un errore non riguarda nulla del modello stesso, allora stai facendo qualcosa di sbagliato: p

Quindi nel tuo caso sarebbe qualcosa di simile:

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

Se ci sono altri errori su l'attributo file che verranno sintetizzati in modo da non doverti preoccupare di sovrascrivere.

+0

solo una domanda. se voglio passare un messaggio che non è un errore. Diciamo che voglio sostituire il file caricato e voglio dire all'utente che è stato sostituito. Se lo faccio in addError, non sono sicuro che il modello verrà salvato, in quanto ha un errore. – lvil

+0

L'errore di aggiunta non dovrebbe influire sul salvataggio del modello. finché convalida dovrebbe salvare – Paystey

+0

Ho bisogno di convalidare che il record non viene creato in un momento sbagliato della giornata. Che cosa sto facendo di sbagliato? – Gherman

2

Non vedo il problema qui. Basta usare addError() http://www.yiiframework.com/doc/api/1.1/CModel#addError-detail. Il modello è mantenuta anche dopo aver richiamato save() su di esso, quindi si può solo fare qualcosa di simile

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

La domanda è come aggiungere errori senza alcun attributo – Gherman

Problemi correlati