Sun*_*dar 17 php composer-php ratchet
我正在尝试运行Ratchet应用程序演示,但我无法执行该文件
这是我的文件结构
/var/www/src/MyApp/
/var/www/src/MyApp/chat.php
/var/www/src/MyApp/chat-server.php
Run Code Online (Sandbox Code Playgroud)
<?php
use Ratchet\Server\IoServer;
use MyApp\Chat;
#require "chat.php";
require 'vendor/autoload.php';
$server = IoServer::factory(
new Chat(),
8080
);
$server->run();
/var/www/src/MyApp/composer.json
Run Code Online (Sandbox Code Playgroud)
{
"autoload": {
"psr-0": {
"MyApp": "src"
}
},
"require": {
"cboden/Ratchet": "0.3.*"
}
}
供应商文件夹存在于此位置
/var/www/src/MyApp/vendor/
Run Code Online (Sandbox Code Playgroud)
每当我在终端中执行聊天服务器文件时,我都会收到以下错误
PHP Fatal error: Class 'MyApp\Chat' not found in /MyApp/chat-server.php
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题
注意:此页面中存在完整的代码详细信息
http://socketo.me/docs/hello-world
这个问题被问到但是仍然没有回答这个问题, 在C:\ wamp\www\bin\chat-server.php中找不到"MyChat\Chat"类
dea*_*ina 19
如果您没有根目录下的composer.json文件和vendor文件夹,则它将不起作用.另外,请勿触摸供应商文件夹(和子文件夹).文件夹结构必须如下所示:
/composer.json
/composer.phar
/vendor/[misc]
/src/MyApp/Chat.php
Run Code Online (Sandbox Code Playgroud)
最后,在更新composer.json之后,请确保运行更新:
php composer.phar update
Run Code Online (Sandbox Code Playgroud)
这样它就可以了.
自动加载的主要路径是composer.json文件的位置,因此如果存在/var/www/src/MyApp/,自动加载将使用它作为基础.
在您的情况下,您说MyApp可以在src目录中找到命名空间(这意味着/var/www/src/MyApp/src).那不是真的,因为文件/var/www/src/MyApp/src/MyApp/Chat.php不存在.
您可以通过3种不同的方式解决此问题:
composer.json - 您可以将composer.json文件移动到/var/www,以便能够将其用作基础;"autoload": { "psr-4": { "MyApp\\": "" } };重新组织文件 - 您还可以将文件结构更改为:
/var/www/src/MyApp/
src/MyApp/
Chat.php
composer.json
Run Code Online (Sandbox Code Playgroud)您必须提及需要自动加载的类的基本路径:
{
"autoload": {
"psr-4": {
"MyApp\\": "src/MyApp/"
}
},
"require": {
"cboden/ratchet": "^0.4.0",
"react/zmq": "0.2.*|0.3.*"
}
}
Run Code Online (Sandbox Code Playgroud)
并运行
Composer dump-autoload
首先尝试自动加载文件:
$ composer update
Run Code Online (Sandbox Code Playgroud)
如果它仍然不起作用require 'chat.php';,则在chat-server.php文件的开头包含该行.它对我有用.