首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用psr-4命名空间失败

使用psr-4命名空间失败
EN

Stack Overflow用户
提问于 2018-01-19 23:05:02
回答 1查看 32关注 0票数 1

我在使用psr-4名称空间时遇到了问题。我的应用程序的结构有点复杂,但我会尝试解释一下。如果有什么不清楚的地方,请随时询问!

首先,我在同一层有两个文件夹。一个使用backoffice类,另一个使用rest api实现。

代码语言:javascript
复制
/myapp/backoffice/
/myapp/rest/

backoffice文件夹中的两个示例类如下所示:

代码语言:javascript
复制
// File: /myapp/backoffice/src/Services/Abstract.php
<?php
namespace Myapp\Backoffice\Services;

abstract class AbstractService
{
}

代码语言:javascript
复制
// File: /myapp/backoffice/src/Services/Login.php
<?php
namespace Myapp\Backoffice\Services;

class LoginService extends AbstractService
{
}

/myapp/backoffice/下的composer.json包含以下声明:

代码语言:javascript
复制
"autoload": {
  "psr-4": {
    "Myapp\\Backoffice\\": "src/"
  }
},

在我的一个rest资源中,我想从后台调用登录服务。该文件如下所示:

代码语言:javascript
复制
<?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包含以下声明:

代码语言:javascript
复制
"autoload": {
  "psr-4": {
    "Myapp\\MyModule\\": "MyModule/src/",
    "Myapp\\Backoffice\\": "../backoffice/src/"
  }
},

然后,我调用rest api并得到以下错误:

代码语言:javascript
复制
PHP Fatal error:  Class 'Myapp\\Backoffice\\Services\\LoginService' not found in /myapp/rest/MyModule/src/Resource/LoginResource.php on line 12

失败的是带有构造函数的那一行。

下面是自动加载的代码:

代码语言:javascript
复制
// 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')
);
EN

回答 1

Stack Overflow用户

发布于 2018-01-20 00:59:42

您的文件名是Login.php,但是您的类名是LoginService,这与PSR-4不兼容。文件名必须与类名匹配,因此将文件重命名为LoginService.php,它应该可以工作。

对于应重命名为AbstractService.phpAbstractServiceAbstract.php也是如此

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48343984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档