0

私は Ratchet と Symfony の両方の初心者です。私は彼らに慣れようとしています。私はセッションの代替手段を使用しましたが、これは非常に奇妙ですが機能します。これがそれです:

JS (ネイティブ PHP セッション)

name = "<?php echo $_SESSION['name']; ?>";
msg = elem.value;
socket.send(name+"|"+msg);

送信された引数はexplodedelimiter 付き|です。2 つの文字列を作成します。1 つは名前で、もう 1 つは msg で、送信者以外のすべての接続に送信されます。

list($name, $message) = explode("|", $msg);

ユーザーがニックネームを入力したときにニックネームを保存し、MyApp 名前空間の Chat クラスからアクセスできる Symfony セッションを使用するにはどうすればよいですか?

API ドキュメントはありますが、セッションを使用する簡単な例はありません。API Documentation.

木:

/www
 |
 |___/src
 |    |
 |    |____/MyApp/
 |           |
 |           |___Chat.php // The Chat Class
 |
 |___/bin
 |     |
 |     |___chat-server.php
 |
 |___/vendor
 |
 |___/chat.php // <-- Chat Room, sending and receiving here
 |
 |___/index.php // <-- Ask for nickname here
 |
 |___/composer.phar
 |
 |___/composer.lock
 |
 |___/main.js // <-- Index HTML javascript
 |
 |___/socket.js // <-- Websocket handler for char.php
 |
 |___/main.css // <-- All style
4

1 に答える 1

2

コントローラーは、セッションでニックネームを設定できます。

/**
 * @Route("/hello/{nickname}")
 */
public function indexAction($nickname)
{
    $session = $this->getRequest()->getSession();
    $session->set('nickname', $nickname);
}

チャット アプリでニックネームを取得するには、

public function onOpen(ConnectionInterface $conn) 
{
    $nickname = $conn->Session->get('nickname');
}
于 2013-09-07T10:52:47.823 に答える