我在使用psr-4名称空间时遇到了问题。我的应用程序的结构有点复杂,但我会尝试解释一下。如果有什么不清楚的地方,请随时询问!
首先,我在同一层有两个文件夹。一个使用backoffice类,另一个使用rest api实现。
/myapp/backoffice/
/myapp/rest/backoffice文件夹中的两个示例类如下所示:
// File: /myapp/backoffice/src/Services/Abstract.php
<?php
namespace Myapp\Backoffice\Services;
abstract class AbstractService
{
}和
// File: /myapp/backoffice/src/Services/Login.php
<?php
namespace Myapp\Backoffice\Services;
class LoginService extends AbstractService
{
}/myapp/backoffice/下的composer.json包含以下声明:
"autoload": {
"psr-4": {
"Myapp\\Backoffice\\": "src/"
}
},在我的一个rest资源中,我想从后台调用登录服务。该文件如下所示:
<?php
// File: /myapp/rest/MyModule/src/Resource/LoginResource.php
namespace Myapp\MyModule\Resource;
use Myapp\Backoffice\Services\LoginService;
use ZF\Rest\AbstractResourceListener;
class LoginResource extends AbstractResourceListener
{
public function fetchAll($params = [])
{
$service = new LoginService($params);
...
}
}/myapp/ composer.json /下的rest包含以下声明:
"autoload": {
"psr-4": {
"Myapp\\MyModule\\": "MyModule/src/",
"Myapp\\Backoffice\\": "../backoffice/src/"
}
},然后,我调用rest api并得到以下错误:
PHP Fatal error: Class 'Myapp\\Backoffice\\Services\\LoginService' not found in /myapp/rest/MyModule/src/Resource/LoginResource.php on line 12失败的是带有构造函数的那一行。
下面是自动加载的代码:
// File: /myapp/backoffice/vendor/composer/autoload_psr4.php
return array(
'Myapp\\Backoffice\\' => array($baseDir . '/src')
);
// File: /myapp/rest/vendor/composer/autoload_psr4.php
return array(
'Myapp\\MyModule\\' => array($baseDir . '/MyModule/src'),
'Myapp\\Backoffice\\' => array($baseDir . '/../backoffice/src')
);发布于 2018-01-20 00:59:42
您的文件名是Login.php,但是您的类名是LoginService,这与PSR-4不兼容。文件名必须与类名匹配,因此将文件重命名为LoginService.php,它应该可以工作。
对于应重命名为AbstractService.php的AbstractService和Abstract.php也是如此
https://stackoverflow.com/questions/48343984
复制相似问题