【发布时间】:2021-09-29 22:24:29
【问题描述】:
标题令人困惑。基本上,我无法在不属于框架的类中访问 Laravel 的实用程序。
错误是:Call to a member function connection() on null in C:\xampp\htdocs\blazocket\vendor\laravel\framework\src\Illuminate\Databas e\Eloquent\Model.php:1571
我有一个基于 Ratchet 库的 Websocket 服务器,它具有以下结构:
namespace App\Http\Websockets;
$server = new \Ratchet\App('localhost', 8080);
$server->route('/api/socket', new WebSocketHandler, array('*'));
来自 WebSocketHandler 的片段:
namespace App\Http\Websockets;
use App\Models\Website;
class WebSocketHandler implements MessageComponentInterface {
protected $apis;
protected $clients;
public function __construct() {
$this->refreshDatabase();
$this->clients = new \SplObjectStorage;
}
private function refreshDatabase(){
$this->apis = Website::all();
}
}
我试过这样做:
$app = require dirname( __FILE__ ) . '/../../../bootstrap/app.php';
$app->boot();
但这不是解决方案(我从另一个 SO 问题尝试过)。另外,我读过this,但我不确定我可以实现“引导”的方式。
我知道错误正在发生,因为类 (WebSocketHandler) 和 Laravel 框架之间没有连接。我已经尝试了每一个答案,并检查了文档,我自己找不到一种方法来连接这个类。
非常感谢您的帮助。
【问题讨论】:
-
所以基本上,你有一个 Laravel 项目,并且你在 Laravel 项目中安装了带有 composer require 的 Ratchet?如果是 - 你应该作曲家转储自动加载。如果没有——并且你安装在其他地方——没有必要认为它由于缺少一些东西而无法工作。它不起作用,因为它们是不同的项目并且使用来自 /vendor/composer 的不同自动加载器。我建议将它安装在 laravel 项目中。但是,如果你不能这样做,你可以创建一个新的作曲家项目。需要棘轮并添加自动加载的路径,以及laravel项目的完整路径。
-
你声明了命名空间吗?
标签: php laravel websocket eloquent ratchet