Yii2 Yii 2在多个控制器中使用相同的控制器方法/操作

Yii2 Yii 2在多个控制器中使用相同的控制器方法/操作,yii2,yii-components,yii2-advanced-app,Yii2,Yii Components,Yii2 Advanced App,我有一个检查用户是否登录到我的UserController的方法。我需要在所有其他控制器中使用相同的方法。如何在不将代码复制粘贴到所有控制器的情况下执行相同的操作 控制器方法如下所示 公共功能已登录(){ $session=Yii::$app->session; $cookies=Yii::$app->request->cookies; //打印(会话); $session->open(); $session\u cookie\u name=Yii::$app->params['cookie\

我有一个检查用户是否登录到我的UserController的方法。我需要在所有其他控制器中使用相同的方法。如何在不将代码复制粘贴到所有控制器的情况下执行相同的操作

控制器方法如下所示

公共功能已登录(){
$session=Yii::$app->session;
$cookies=Yii::$app->request->cookies;
//打印(会话);
$session->open();
$session\u cookie\u name=Yii::$app->params['cookie\u name\u session\u var'];
$logged_in=false;
//echo“-memn-”$cook_name.“是halle-”;
//打印(美元会话);
如果($cook\u name=$session->get($session\u cookie\u name))){
//回声“-”;
//打印(cookies);
//退出;
$write_cookies=Yii::$app->response->cookies;
//回声“;
//echo$cookies->getValue($cook_name)。“胎盘”;
如果($u\u令牌=$cookies->getValue($cook\u名称)){
回声“b”;
如果($u_代币){
回声“c”;
$write\u cookies->remove($cook\u name);
取消设置($write_cookies[$cook_name]);
$session->destroy();
$session->open();
$cookie_name=sha1($u_令牌).time();
$session[$session\u cookie\u name]=$cookie\u name;
$write\u cookies->add(新建\yii\web\Cookie)([
“名称”=>$session[$session\u cookie\u name],
“值”=>$u_令牌,
“过期”=>time()+6000000
]));//大约一小时的到期时间
$session->close();
$logged_in=true;
//echo$u_代币;
}    
}  
}  
如果(!$已登录){
$session->destroy();
}
返回$logged_in;
}
1)您可以创建自己的组件,并将此方法放在此处或将其放置在模型中(取决于该方法的逻辑)。例如,可以将组件放置在
components
文件夹中(默认情况下它不存在)。然后只需在您想要的任何控制器中使用此组件

2)如果此代码需要在某些操作之前或之后执行,则可以使用行为


3)您可以使用继承并创建从
yii\web\controller
扩展的自定义控制器,在此处声明此方法并扩展所有其他控制器,您将在何处使用自定义逻辑。

除了arogachev的答案之外,您的代码实际上应该位于扩展User component类的类中,更不用说User identity类已经完成了代码所做的一切(只有更多更好)。它附带了iGuest功能。

这确实是一个新的信息来整合它,它非常好,您还可以扩展它并进行自己的更改,之后您可以告诉yii使用您的用户组件而不是标准组件。这还集成了yii的过滤器(例如,使操作仅对登录用户可用)