Yii2 - 触发后从事件处理程序终止应用程序

Posted

技术标签:

【中文标题】Yii2 - 触发后从事件处理程序终止应用程序【英文标题】:Yii2 - terminate App from event handler after triggering 【发布时间】:2017-02-27 10:52:22 【问题描述】:

我使用yii2-user 进行用户注册。我想在从社交帐户登录之前检查用户是否已注册。我在创建他的帐户并在main.php 全局处理它之前触发事件。

如果用户已经注册,我想显示一些消息,然后不让他继续注册/登录过程。

简而言之,我希望用户被重定向到主页,如果指定的条件匹配,则显示来自事件处理程序的消息。

'modules' => [
    'user' => [
        'class' => 'dektrium\user\Module',
        'enableRegistration' => true,
        'controllerMap' => [
            'security' => [
                'class' => \dektrium\user\controllers\SecurityController::className(),
                'on ' . \dektrium\user\controllers\SecurityController::EVENT_BEFORE_CREATE_ACCOUNT => function ($e) 

                    $email = $e->client->email;

                    $user_model = \dektrium\user\models\User::findOne(['email' => $email]);

                    if($user_model == Null)
                    
                        return;     //then just return and continue next steps
                    
                    Yii::$app->session->setFlash('info', "You cannot directly login with this account. Please login with the credentials sent to your email ($email) first and then connect your Account from Settings.");
                    //---------- NOW REDIRECT TO HOME PAGE--------
                
            ],
        ],
    ],
],

将用户重定向到主页并停止执行当前控制器的最佳方法是什么?

【问题讨论】:

【参考方案1】:

添加:

//---------- NOW REDIRECT TO HOME PAGE--------
Yii::$app->response->redirect(Url::home());
Yii::$app->end();

【讨论】:

以上是关于Yii2 - 触发后从事件处理程序终止应用程序的主要内容,如果未能解决你的问题,请参考以下文章

后台事件触发时程序终止

yii2框架随笔37

yii2框架随笔35

yii2框架随笔36

Yii2 静态方法触发事件如何实现?

yii2.0 事件