试图从命名空间加载类“MyApp”

Posted

技术标签:

【中文标题】试图从命名空间加载类“MyApp”【英文标题】:Attempted to load class "MyApp" from namespace 【发布时间】:2017-03-27 23:51:45 【问题描述】:

我在一个 websocket 聊天项目中使用 symfony 2 和 ratchet 和 memcache,ratchet 与 symfony 配合得很好,我在官方网站文档上的“hello world”应用程序上对其进行了测试 但问题是当我运行这条线时

    new Chat(new MyApp(), $this->getContainer()),

我得到这个错误

Attempted to load class "MyApp" from namespace

我的命令行代码

<?php
// myapplication/src/sandboxBundle/Command/SocketCommand.php
// Change the namespace according to your bundle
namespace check\roomsBundle\Command;
use Ratchet\Session\SessionProvider;
use Symfony\Component\HttpFoundation\Session\Storage\Handler;
use Doctrine\Common\Cache\MemcacheCache;
use Ratchet\App;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\HttpFoundation\Session\Storage\Handler\MemcacheSessionHandler;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
// Include ratchet libs
use Ratchet\Server\ioserver;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
// Change the namespace according to your bundle
use check\roomsBundle\Sockets\Chat;
use Doctrine\ORM\EntityManager;
use Symfony\Component\HttpFoundation\Session\Session;

class WsServerCommand extends ContainerAwareCommand

    protected function configure()
    
        $this->setName('sockets:start-chat')
            // the short description shown while running "php bin/console list"
            ->setHelp("Starts the chat socket demo")
            // the full command description shown when running the command with
            ->setDescription('Starts the chat socket demo')
        ;    

    protected function execute(InputInterface $input, OutputInterface $output)
    
        $output->writeln([
            'Chat socket',// A line
            '============',// Another line
            'Starting chat, open your browser.',// Empty line
        ]);
        $memcache = new \Memcache;
        $memcache->connect('localhost', 11211);

        $session = new SessionProvider(
            new Chat(new MyApp(), $this->getContainer()),
            new Handler\MemcacheSessionHandler($memcache)
        );

        $server = new App('localhost');
        $server->route('/sessDemo', $session);
        $server->run();
    

Chat.php 代码

<?php
namespace check\roomsBundle\Sockets;
use tuto\testBundle\Entity\Users;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Ratchet\WebSocket\WsServerInterface;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Doctrine\ORM\EntityManager;
use Symfony\Component\DependencyInjection\ContainerInterface as Container;
use Symfony\Component\HttpFoundation\Session\Session;



/**
 * This component will allow access to user data (FOSUserBundle)
 * for each connection in your Ratchet application.
 */
class Chat implements MessageComponentInterface, WsServerInterface

    /**
     * @var \Ratchet\MessageComponentInterface
     */
    protected $_app;
    /**
     * @var \Symfony\Component\DependencyInjection\ContainerInterface
     */
    protected $_container;
    /**
     * @param MessageComponentInterface $app
     * @param ContainerInterface $container
     */
    public function __construct(MessageComponentInterface $app, ContainerInterface $container)
    
        $this->_app = $app;
        $this->_container = $container;
    
    /**
     * @inheritdoc
     */
    public function onOpen(ConnectionInterface $conn)
    
        if (!isset ($conn->Session) || !$conn->Session instanceof Session) 
            throw new \RuntimeException('Session is not defined. Make sure that SessionProvider is executed before FOSUserProvider.');
        
        try 
            $token      = unserialize($conn->Session->get('_security_main'));
            $user       = $token->getUser();
            $provider   = $this->_container->get('fos_user.user_provider.username');
            $conn->User = $provider->refreshUser($user);
         catch (Exception $ex) 
            $conn->User = null;
        
        return $this->_app->onOpen($conn);
    

【问题讨论】:

【参考方案1】:

MyApp 没有任何用处;在您的页面顶部。 使用 AppBundle\Classes 吗?

【讨论】:

以上是关于试图从命名空间加载类“MyApp”的主要内容,如果未能解决你的问题,请参考以下文章

symfony2:试图从命名空间加载类“Memcache”

未捕获的 Symfony\Component\Debug\Exception\ClassNotFoundException:试图从命名空间“UserBundle\UserBundle”加载类“Use

尝试从命名空间加载类您是不是忘记了另一个命名空间的“使用”语句?

尝试从命名空间加载类“Sm_Image_HandlerController”您是不是忘记了另一个命名空间的“使用”语句?

延迟加载基于控制器命名空间约定的外部 JS/CSS 文件?

尝试从命名空间“Application\MediaBundle\Entity”加载类“Media”