首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Slim3 PSR-4自动机

Slim3 PSR-4自动机
EN

Stack Overflow用户
提问于 2017-07-10 10:31:57
回答 1查看 1.7K关注 0票数 2

我正在编写Slim3 API,出于某种原因,slim没有加载composer中定义的命名空间。

这是项目结构。

FolderStruc:

代码语言:javascript
复制
projectApi

 - composer.json
 - src
    - public
      - index.php
    - ProjectName
      - Api
        - Controllers
        - Entities
        - Commands

我的作曲家文件包和PSR-4自动加载程序设置。

composer.json

代码语言:javascript
复制
{
    "require": {
        "slim/slim": "^3.0",
        "symfony/yaml": "3.1",
        "symfony/console": "3.1",
        "symfony/process": "3.1",
        "doctrine/orm": "^2.5",
        "doctrine/doctrine-bundle": "^1.6",
        "doctrine/doctrine-cache-bundle": "^1.2",
        "sabre/xml": "1.1.0",
        "php-di/php-di": "@dev",
        "php-amqplib/php-amqplib": "@dev",
        "ramsey/uuid": "dev-master",
        "monolog/monolog": "~1.15@dev",
        "predis/predis": "~1.0.1",
        "spipu/html2pdf": "^4.5",
        "iio/libmergepdf": "~3.0"
    },
    "minimum-stability": "dev",
    "autoload": {
        "psr-4": {
            "src\\ProjectName\\": "src/ProjectName/"
        }
    },
    "autoload-dev": {
        "psr-4": { "src\\ProjectName\\Tests\\": "tests" }
    }
}

index.php

CategoryController

代码语言:javascript
复制
namespace ProjectName\Api\Controllers;

class CategoryController
{

    /**
     * @param \Slim\App $app
     * @return array
     */
    public function index(\Slim\App $app)
    {
        return ['Cats', 'Cats2', 'Cats3'];
    }
}

** routes.php **

代码语言:javascript
复制
$app->get('/v1/category/list', function (Request $request, Response $response) {
    $response = $response->withHeader('Content-type', 'application/json');
    $categoryCtrl = new \ProjectName\Api\Controllers\CategoryController();
});

Slim无法加载命名空间\ProjectName\Api\Controllers\CategoryController

知道哪里出了什么问题吗?

向丹亚勒问好

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-10 10:44:29

composer.json文件中有错误的自动加载器定义。

其模式是:

代码语言:javascript
复制
"psr-4": {
    "Namespace\\Prefix\\": "/path/to/source/root"
}

因此,就你的情况而言,可能应该是:

代码语言:javascript
复制
"autoload": {
    "psr-4": {
        "ProjectName\\": "src/ProjectName/"
    }
},
"autoload-dev": {
    "psr-4": { "ProjectName\\Tests\\": "tests/" }
}

autoload-dev定义假设在项目根路径下有一个tests目录,在您的问题中没有提到这个目录。

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

https://stackoverflow.com/questions/45009762

复制
相关文章

相似问题

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