【问题标题】:Yii 2 use same controller method / action in multiple controllersYii 2 在多个控制器中使用相同的控制器方法/动作
【发布时间】:2015-05-11 13:58:41
【问题描述】:

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

控制器方法看起来像

public function is_logged_in() {
	     $session = Yii::$app->session; 
	     $cookies = Yii::$app->request->cookies;
	     //print_r($session);
	     $session->open();
	     $session_cookie_name = Yii::$app->params['cookie_name_session_var'];
	     $logged_in = false;
	     //echo "-memn-".$cook_name.' is halle - ';
	     //print_r($_SESSION);
	     if(($cook_name = $session->get($session_cookie_name))) {
	     	//echo " - <pre>";
	     	//print_r($cookies);
	     	//exit;
	     	$write_cookies =  Yii::$app->response->cookies;
	     	//echo "</pre>";
	     	//echo $cookies->getValue($cook_name).' placenta';
		     if($u_token = $cookies->getValue($cook_name)) {
		     	echo "b";
			 	 if($u_token) {
			 	  echo "c"; 
			 	 	$write_cookies->remove($cook_name);
			 	 	unset($write_cookies[$cook_name]);
			 	 	$session->destroy();
			 	 	$session->open();
			 	 	$cookie_name = sha1($u_token).time();
			 	 	$session[$session_cookie_name] = $cookie_name;
			 	 	$write_cookies->add(new \yii\web\Cookie([
	            		'name' => $session[$session_cookie_name],
	            		'value' => $u_token,
	            		'expire' => time() + 6000000
	            	])); // around one hour expiry time
	            	$session->close();

			 	 	
			 	 	
			 	 	 
			 	 	
			 	 	$logged_in = true;
				 	 //echo $u_token;
			 	 }    
		     }  
	     }  
	     
	     if(!$logged_in) {
		     $session->destroy();
	     }
	     return $logged_in;
    }

【问题讨论】:

    标签: yii2 yii-components yii2-advanced-app


    【解决方案1】:

    1) 您可以创建自己的组件并将此方法放在这里或放在模型中(取决于该方法的逻辑)。例如可以将组件放置在components 文件夹中(默认情况下它不存在)。然后在你想要的任何控制器中使用这个组件。

    2)如果这段代码需要在某些动作之前或之后执行,可以使用行为。

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

    【讨论】:

      【解决方案2】:

      除了 arogachev 的回答之外,您的代码实际上应该位于扩展 User 组件类 http://www.yiiframework.com/doc-2.0/yii-web-user.html 的类中,更不用说用户身份类已经完成了您的代码所做的一切(只是好多了,好多了)。自带isGuest功能。

      【讨论】:

      • 这对我来说真的是一个新信息
      • 查一下,它很不错,你也可以扩展它并进行自己的更改,之后你可以告诉 yii 使用你的用户组件而不是标准组件。这也与 yii 的过滤器集成(例如,使操作仅对登录用户可用)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-13
      相关资源
      最近更新 更多