5

モデルには、ユーザーが指定した開始期間と期間に基づいてサービスの有効期限を保存する afterSave 関数があります。私afterSaveは正常に動作しますが、空白のページを表示する代わりに、モデルを保存した後にリダイレクトされません。

モデル:

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);
} 

コントローラ:

if($model->save())

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

} 

afterSave をリダイレクトするにはどうすればよいですか?よろしくお願いします!

4

5 に答える 5

3

適切な方法はsave()、コントローラーから を呼び出すことです。これにより、afterSave()暗黙的に が呼び出されます。

Controller-Actionでこれを行うだけです-

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

于 2014-05-02T10:53:32.110 に答える
1

あなたのコントローラーは問題ありませんが、「afterSave」メソッドに奇妙な点があります。がある

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

まず、標準の ActiveRecord の「save」は、最初の引数としてブール値を持つ必要があります。次に、ここで再帰を取得します。「afterSave」メソッドが「save」メソッド内で呼び出されているためです。

したがって、本当の問題は、エラーが表示されないことだと思います。Yii を含める前に、index.php でエラー報告を有効にしてみてください。

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');

これは開発専用です。

于 2015-02-24T06:45:19.957 に答える
0

私も同じ問題を抱えていました。しかし、それは次の方法で解決されました。

public function afterSave($insert, $changedAttributes)
{
    parent::afterSave($insert, $changedAttributes);

    if ($insert) {
        $month = "+".$this->duration_in_months." month";
        $this->exp_date = date("Y-m-d H:i:s", strtotime($month));
        $this->save(false, ['exp_date']);
    }
}
于 2015-10-04T19:19:55.400 に答える
0

\Yii::$app->response->redirect('url')->send()どこからでもリダイレクトに使用できます。

を呼び出すため、アプリケーションに空白のページが表示$this->save(['exp_date'])されますafterSave()。再度呼び出しafterSave()、無限ループを引き起こします。これは避けるべきです。

于 2014-12-09T09:09:33.993 に答える