我正在用Ratchet和Laravel创建一个websocket应用程序,需要在我的websocket类中使用一个Eloquent查询,但是由于我在websocket类中使用了另一个命名空间,因此雄辩式不可用。
这是课程的开始:
use Illuminate\Auth\UserTrait;
use Illuminate\Auth\UserInterface;
use Illuminate\Auth\Reminders\RemindableTrait;
use Illuminate\Auth\Reminders\RemindableInterface;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
class Socket extends Eloquent implements MessageComponentInterface, UserInterface, RemindableInterface {
use UserTrait, RemindableTrait;
这是带有类映射的composer.json:
"autoload": {
"classmap": [
"app/commands",
"app/controllers",
"app/models",
"app/database/migrations",
"app/database/seeds",
"app/tests/TestCase.php",
"app/libraries",
"vendor/cboden/ratchet/src" // added this
]
我已经将composer.json从原始状态更改为上述状态,就像这样:
...
"psr-0": { //removed this
"MyApp": "vendor/cboden/ratchet/src", //removed this
}
Socket类驻留在app / libraries / Socket.php中
嗯,我几乎已经尝试过所有想到的事情,有人知道我在做什么错吗?
引发的错误是:
PHP Warning: The use statement with non-compound name 'Socket' has no effect in /home/michael/PhpstormProjects/preisopt/app/libraries/Socket-Server.php on line 5
PHP Fatal error: Class 'Eloquent' not found in /home/michael/PhpstormProjects/preisopt/app/libraries/Socket.php on line 15
这是Socket-Server的第5行:
use Socket;
Socket的第15行:
class Chat extends Eloquent implements MessageComponentInterface, UserInterface, RemindableInterface {
我也试图写这样的行
class Chat extends \Eloquent implements MessageComponentInterface, UserInterface, RemindableInterface {
这将引发此错误:
PHP Fatal error: Class 'User' not found in /home/michael/PhpstormProjects/preisopt/app/libraries/Socket.php on line 35
这是第35行:
$dbtoken = User::where('username', '=', $split[1] )->get('sockettoken');
所有此类和模型都存在,并且在不使用此类时可以正常工作。
我已经尝试了很多事情,以至于到时候这可能是一些奇怪的东西...
您的问题有点令人困惑,但听起来您似乎对名称空间的工作方式产生了误解。
这
PHP警告:非复合名称“ Socket”的use语句在第5行的/home/michael/PhpstormProjects/preisopt/app/libraries/Socket-Server.php中无效
是PHP告诉您该语句
use Socket;
什么也没做。该use
语句使您可以告诉PHP“嘿,将这个类从另一个名称空间导入当前名称空间”。当您说use Socket
时,该类Socket
已在当前名称空间中。如果\Socket
您要在其他课程中使用全局课程,您想说
use \Socket;
如果要在另一个名称为的命名空间中使用类Socket
,请说
use Namespace\Path\To\Socket
//or
use \Top\Level\Namespace\Path\To\Socket
取决于文件的当前名称空间。
错误
PHP致命错误:在第15行的/home/michael/PhpstormProjects/preisopt/app/libraries/Socket.php中找不到类'Eloquent'
PHP致命错误:在第35行的/home/michael/PhpstormProjects/preisopt/app/libraries/Socket.php中找不到类'User'
Make听起来就像您在尝试使用全局类\Eloquent
并\User
在命名空间文件中一样。您要么需要添加一个
use \Eloquent;
use \User;
在文件顶部,或者在使用它们时在文件中引用这些全局类并在其前加反斜杠。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句