Silex名称空间

Sty*_*hon 3 php namespaces silex

我仍然是名称空间的新手,并且很难理解如何使用它们.我正在使用Silex Microframework并尝试设置我的文件夹结构.到目前为止,我有:

cms/
  ACP/
    Controller/
      HomeController.php
    View/
  Front/
    Controller/
      HomeController.php
    View/
      Template/
        page.php
      home.php
  app.php
  bootstrap.php
Run Code Online (Sandbox Code Playgroud)

我正在尝试在Front/Controller文件夹中加载HomeController.在我的app.php文件中,我正在呼叫家里的控制器.

require_once __DIR__.'/../vendor/autoload.php';

$app = new Silex\Application();
$app['debug'] = true;

$app->get("/", "cms\Front\Controller\HomeController::index");
$app->get('/test', function() {
    return new Symfony\Component\HttpFoundation\Response("Test successful");
});

return $app;
Run Code Online (Sandbox Code Playgroud)

如果我进入/test浏览器它工作正常.然而,当我去/那时我得到一个错误.

ControllerResolver.php第153行中的InvalidArgumentException:

类"cms\Front\Controller\HomeController"不存在.

我已经cms在composer.json和HomeController中定义为命名空间

<?php namespace cms\Front\Controller;

class HomeController {

    public function index() {
        return "Hello World, I'm the front page!";
    }

}
Run Code Online (Sandbox Code Playgroud)

我也尝试将HomeController.php文件直接移动到cms目录中,将文件中的命名空间更改为just cms然后运行$app->get("/", "cms\HomeController::index");,但它仍然无效.我得到了不存在的相同错误.

这是我的作曲家档案:

{
    "require": {
        "silex/silex": "~1.1",
        // ...other requirements
    },
    "require-dev": {
        "symfony/var-dumper": "dev-master"
    },
    "autoload": {
        "psr-0": {
            "cms": "cms/"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

为了让这个工作,我需要做什么?我似乎无法在Silex网站或Google上找到任何内容.有人可以帮助我了解名称空间以及它是如何工作的吗?

Pop*_*lus 6

您需要将源文件夹添加到作曲家自动加载中(https://getcomposer.org/doc/01-basic-usage.md#autoloading)

"autoload": {
    "psr-4": {"Acme\\": "./"}
}
Run Code Online (Sandbox Code Playgroud)

在你的情况下,路径"./"应该工作(没有测试),如果不是你应该尝试将cms文件夹放入文件夹src,并将路径设置为"src /"

记得跑去composer dump-autoload重生autoload.php