私はこのようなyii2で多くのモジュールを扱っています。AccessControl:yii2のコントローラを開くためにログインする必要があります:
yii_basic
-- modules
-- admin
-- it
-- members
私はユーザー(メンバー)がアプリで送信する電子メールで承認サインを必要とするシナリオを持っています。
たとえば、これはリンク:dzil.local/it/request/update?id=940
です。このリンクは、実際にはIDを持つ更新コントローラです。
アクセスするときにログインを強制する必要があります。 しかし、私の問題は、ログインが成功した後、それは私が意味するコントローラー、つまりdzil.local/it/request/update?id=940
ではなく、モジュールのactionIndexにリダイレクトされていることです。
これは、クラスRequestControllerです:
public function actionLogin()
{
if (!Yii::$app->user->isGuest) {
return $this->goHome();
}
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
if (Yii::$app->user->can('Administrator')) {
return $this->redirect(['/admin']);
} else if (Yii::$app->user->can('IT')) { // the user is on IT
return $this->redirect(['/it']);
} else { //defaultnya user common
return $this->redirect(['/members']); // the user is member
}
}
return $this->render('login', [
'model' => $model,
]);
}
のベストプラクティスを得るために私に助言してください:
class RequestController extends Controller {
public function behaviors() {
return [
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'delete' => ['post'],
'bulk-delete' => ['post'],
],
],
'access' => [
'class' => \yii\filters\AccessControl::className(),
'rules' => [
[
'actions' => ['create', 'update', 'delete', 'get-item-detail', 'error'],
'allow' => true,
],
[
'actions' => ['logout', 'index'], // add all actions to take guest to login page
'allow' => true,
'roles' => ['@'],
],
],
],
];
}
私はそれがここから来て失敗したと思います。ログイン後に戻ってルーティングが必要な場合はreturn $this->goBack();
を必要な場所
ええ、私はの$ this - > GOBACK()を返す知っていました。私はmodule afterLoginとbeforeLoginロジックの間で分けました。 –