2014-05-02 19 views
5

Mam funkcję AfterSave w moim modelu, która zapisuje datę ważności niektórych usług w oparciu o czas rozpoczęcia i czas trwania podany przez użytkownika. Moja afterSave działa dobrze, ale nie jest przekierowywana po zapisaniu modelu zamiast pokazywania pustej strony.po przekierowaniu w Yii2

Model:

public function afterSave($insert) 
{ 

    $month= "+".$this->duration_in_months." month"; 
    $this->exp_date=date("Y-m-d H:i:s",strtotime($month)); 
    $this->save(['exp_date']); 

    return parent::afterSave($insert); 
} 

Kontroler:

if($model->save()) 

    return $this->redirect(['view', 'id' => $model->sub_id]); 

} 

Jak mogę przekierować afterSave Dzięki z góry?

Odpowiedz

3

Właściwym sposobem jest wywołanie save() ze sterownika, który wywoła niejawnie nazwę afterSave().

Trzeba tylko zrobić to w kontrolerze-Action -

if($model->save()) { $this->redirect(......); }

+0

@ Kunal..Jest wdrażany w ten sam sposób tylko ..! –

+0

Więc napisałeś wywołanie 'redirect()' w kontrolerze, a nie w 'Model -> afterSave() {...}' jak wspomniano w pytaniu. Wciąż wyświetlana jest pusta strona? Jeśli tak, to wspomnij tutaj o wywołaniu 'redirect() 'ze sterownika. –

+0

Zaktualizowano pytanie! –

0

\Yii::$app->response->redirect('url')->send() można użyć do przekierowania zewsząd.

Twoja aplikacja wyświetla pustą stronę, ponieważ dzwonisz pod numer $this->save(['exp_date']) w afterSave(). Ponownie wywołuje afterSave() i powoduje nieskończoną pętlę. Powinieneś tego unikać.

-2

Spróbuj return $this->redirect();

+0

to jest jedyna prawidłowa odpowiedź :) – Blizz

1

Twój sterownik jest OK, ale widzę coś dziwnego w swoim "afterSave" metody. Jest

$this->save(['exp_date']) 

Przede wszystkim norma ActiveRecord „zapisz” musi mieć wartość logiczną jako pierwszy argument. Następnie dostaniesz tutaj rekursję - metoda "afterSave" jest wywoływana wewnątrz metody "save".

Zakładam, że prawdziwym problemem jest brak wyświetlenia błędu. Spróbuj włączyć raportowanie błędów w pliku index.php przed dodaniem Yii:

error_reporting(E_ALL); 
ini_set('display_errors', '1'); 
defined('YII_DEBUG') or define('YII_DEBUG', true); 
defined('YII_ENV') or define('YII_ENV', 'dev'); 

Jest to wyłącznie do programowania.

+0

Podczas programowania Twój plik php.ini powinien zawierać raportowanie błędów. Nie ma sensu, by bałaganiarski kod kłaść się i wypluwać błędy. –

0

Miałem ten sam problem. Ale został rozwiązany w następujący sposób:

Powiązane problemy