【问题标题】:Slim PHP Framework Controller DirectorySlim PHP 框架控制器目录
【发布时间】:2019-01-11 16:01:59
【问题描述】:

我正在为一个新应用程序使用 Slim Framework,我希望在我的 src 文件夹中有一个控制器目录。我不断收到错误消息:

Callable \App\Controllers\MobileApiController does not exist

dependencies.php

$container['MobileApiController'] = function ($c)
{
    return new \App\Controllers\MobileApiController;
};

routes.php

$app->get('/user', '\App\Controllers\MobileApiController:getUser');    

MobileApiController.php

<?php

namespace App\Controllers;

use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Message\ResponseInterface as Response;

class MobileApiController
{

    protected $container;
    public function __construct($c) {
        $this->container = $c;
    }

    public function getUser($request, $response, $args)
    {
       var_dump($request);
    }
}

composer.json

"autoload-dev": {
    "psr-4": {
        "App\\": "src/",
        "Tests\\": "tests/"
    }
},

“src”文件夹有一个“Controllers”文件夹以及“routes.php”和“dependencies.php”文件

【问题讨论】:

  • 你运行composer dump-autoload了吗?我无法重现该错误。它对我有用。
  • 只需在 composer.json 中将 App namespace"App\\": "src/","autoload-dev" 移动到 "autoload" 并运行 composer update
  • @DanielO 有什么理由使用autoload 而不是autoload-dev?因为 OP 可能真的希望有一些不需要包含在生产环境中的与开发相关的类。
  • @Nima 通常命名空间Tests(或测试)仅与开发相关,App 与生产和开发相关。 Tests 命名空间属于autoload-devApp 属于autoload
  • 是的,但是在这种情况下使用 autoload-dev 应该不会导致任何问题,除非 OP 将 --no-dev 传递给作曲家。关键是我用autoload-dev检查了问题中描述的条件,我无法重现问题,所以问题应该是别的。

标签: php api slim


【解决方案1】:

通常命名空间 Test(单数)或 App\Test 仅与开发相关,App 与生产和开发相关。 App\Test 命名空间属于autoload-devApp 属于autoload

示例(composer.json):

 "autoload": {
    "psr-4": {
      "App\\": "src/"
    },
  },
  "autoload-dev": {
    "psr-4": {
      "App\\Test\\": "tests/"
    }
  },

【讨论】:

    猜你喜欢
    • 2016-04-04
    • 2015-04-30
    • 2015-08-04
    • 1970-01-01
    • 2017-12-12
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    相关资源
    最近更新 更多