如何在laravel 4.2中获取当前实例

时间:2016-09-15 13:16:16

标签: php laravel session websocket ratchet

所以我正在使用这个使用棘轮作为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()。在我的情况下,最好的选择是什么?

1 个答案:

答案 0 :(得分:0)

这似乎可行:

        $app = App::getFacadeApplication();

我找不到执行此操作的任何参考,但是通过Facade界面找到了它。所以我不知道这是否是一个好习惯。我之所以使用它,是因为我在Laravel之外使用了Illuminate。