Я создаю приложение websocket с помощью Ratchet и Laravel и мне нужно использовать запрос Eloquent в моем классе 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 / library / 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
Это строка 5 Socket-Server:
use 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’ не действует в /home/michael/PhpstormProjects/preisopt/app/libraries/Socket-Server.php в строке 5
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: класс ‘Eloquent’ не найден в /home/michael/PhpstormProjects/preisopt/app/libraries/Socket.php в строке 15
Неустранимая ошибка PHP: класс «Пользователь» не найден в /home/michael/PhpstormProjects/preisopt/app/libraries/Socket.php в строке 35
Make звучит так, как будто вы пытаетесь использовать глобальные классы \Eloquent
а также \User
внутри пространства имен Вам нужно будет либо добавить
use \Eloquent;
use \User;
в верхней части файла или ссылаться на эти глобальные классы с обратной косой чертой в файле, когда вы их используете.
Других решений пока нет …