所以我正在使用这个使用棘轮作为websockets的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()。在我的情况下,最好的选择是什么?
答案 0 :(得分:0)
这似乎可行:
$app = App::getFacadeApplication();
我找不到执行此操作的任何参考,但是通过Facade界面找到了它。所以我不知道这是否是一个好习惯。我之所以使用它,是因为我在Laravel之外使用了Illuminate。