gpt4 book ai didi

yii2 - Yii 2 在多个 Controller 中使用相同的 Controller 方法/ Action

转载 作者:行者123 更新时间:2023-12-04 01:20:20 25 4
gpt4 key购买 nike

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

Controller 方法看起来像

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;
}

最佳答案

1) 您可以创建自己的组件并将此方法放在此处或将其放置在模型中(取决于该方法的逻辑)。例如,可以将组件放置在 components 中文件夹(默认不存在)。然后只需在您想要的任何 Controller 中使用此组件。

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

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

关于yii2 - Yii 2 在多个 Controller 中使用相同的 Controller 方法/ Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30169664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com