gpt4 book ai didi

php - 在 laravel 中创建的类/不同的命名空间中访问和使用 eloquent

转载 作者:行者123 更新时间:2023-12-04 16:14:31 28 4
gpt4 key购买 nike

我正在使用 Ratchet 和 Laravel 创建一个 websocket 应用程序,并且需要在我的 websocket 类中使用 Eloquent 查询,但是 eloquent 不可用,因为我在 websocket 类中使用了另一个命名空间。

这是类(class)的开始:

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 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 是否告诉您该声明
use Socket;
什么都不做 use语句让您告诉 PHP“嘿,将这个类从另一个命名空间导入当前命名空间”。当你说 use Socket ,那个类 Socket已经在当前命名空间中。如果您尝试使用全局类 \Socket在另一个类,你想说
use \Socket;
如果您尝试在另一个 namespace 中使用基名称为 Socket 的类,你想说
use Namespace\Path\To\Socket 
//or
use \Top\Level\Namespace\Path\To\Socket
取决于文件的当前命名空间。
错误

PHP Fatal error: Class 'Eloquent' not found in /home/michael/PhpstormProjects/preisopt/app/libraries/Socket.php on line 15

PHP Fatal error: Class 'User' not found in /home/michael/PhpstormProjects/preisopt/app/libraries/Socket.php on line 35


Make 听起来像是您正在尝试使用全局类 \Eloquent\User在命名空间文件中。你要么需要添加一个
use \Eloquent;
use \User;
在文件的顶部,或者在使用它们时在文件中使用前导反斜杠引用这些全局类。

关于php - 在 laravel 中创建的类/不同的命名空间中访问和使用 eloquent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27429752/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com