【发布时间】:2017-01-23 12:49:46
【问题描述】:
所以我正在开发这个使用棘轮作为 websocket 的 Laravel 应用程序,我想在我的 websocket 控制器中获取当前用户会话。以前我使用的是 Laravel 5.2,这段代码效果很好
public function onOpen(ConnectionInterface $conn) {
$session = (new SessionManager(App::getInstance()))->driver();
$cookies = $conn->WebSocket->request->getCookies();
if(!empty($cookies)){
$laravelCookie = urldecode(isset($cookies[Config::get('session.cookie')]) ? $cookies[Config::get('session.cookie')] : '');
if(!empty($laravelCookie)){
$idSession = Crypt::decrypt($laravelCookie);
$session->setId($idSession);
$conn->session = $session;
}
}
$newConnection = new \stdClass();
$newConnection->resourceId = $conn->resourceId;
$newConnection->conn = $conn;
$this->clients[] = $newConnection;
$newConnection->conn->send(json_encode(['status' => 'success', 'message' => 'Response from server, successful']));
}
用户连接后,我只是在用户发送消息时加载当前会话
public function onMessage(ConnectionInterface $from, $msg) {
$user = [];
$request = json_decode($msg);
if(isset($from->session)){
$from->session->start();
$idUser = $from->session->get(Auth::getName());
QLog::info($idUser);
if (isset($idUser)) {
$user = User::find($idUser);
}
$from->session->save();
}
if($request->action == 'get-user' && $user){
$this->clients[0]->conn->send(json_encode(['username' => $user->getFullName()]));
} else {
$this->clients[0]->conn->send(json_encode(['username' => 'not found']));
}
}
但是现在我需要在 Laravel 4.2 中做同样的事情,但事实证明,在 Laravel 4.2 中没有方法 getInstance()。在我的情况下使用什么是最好的选择?
【问题讨论】:
-
代码和“getInstance()”方法有什么联系?
-
对不起,那是我尝试过的代码,但它不起作用,将 getFacadeRoot() 更改为 getInstance()。我在 Laravel 5.2 中使用了 getInstance()
标签: php laravel session websocket ratchet