我想知道是否可以为经过身份验证的访客用户制作不同的homeUrl?我在SiteController.php中有这样的规则
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['logout', 'signup'],
'rules' => [
[
'actions' => ['signup'],
'allow' => true,
'roles' => ['?'],
'denyCallback' => function() {
return $this->redirect('/account');
}
],
[
'actions' => ['logout', 'condition'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
答案 0 :(得分:1)
这不应该是一个很大的问题。我的答案结构如下:
这个很容易。只需将主页URL设置为您希望访客访问者登录的任何内容。把它放在你的配置中:
//...
'homeUrl'=>'site/home-guests',
//...
每次页面加载都会通过表单提交,cookie(记住我),会话或访问令牌进行登录。你不会注意到这一点,因为它会自动发生,除了实际的表单登录。
yii\web\User
- 类有一个事件,每次登录后都会触发。它被称为yii\web\User::EVENT_AFTER_LOGIN
。您可以找到触发方法here的文档。
为了满足您的要求,只需扩展用户类,并在init()
- 方法中附加一个事件处理程序。如果抛出上述事件,请更改主页URL。完成!
下面是自定义用户类的代码:
class User extends \yii\web\User {
//...
public function init() {
parent::init();
//listen to after login event
$this->on(static::EVENT_AFTER_LOGIN, function ($event) {
Yii::$app->setHomeUrl(Url::to(['site/home-logged-in']));
});
}
//...
}
要让Yii使用您的自定义和扩展类,只需在配置中告诉它:
//...
'user'=>[
'class'=>'app\components\User',
],
//...
如果它不是关于URL,而只是根据用户的登录状态向用户显示不同的内容,那么您有其他/更简单的选择:
哪一个是正确的取决于您的详细要求。这很难说明您提供的信息。
如果您有其他问题,请告诉我。我很乐意提供帮助!