【问题标题】:Silex namespace : class MainController does not existSilex 命名空间:类 MainController 不存在
【发布时间】:2015-08-31 12:49:22
【问题描述】:

我尝试使用 Silex 框架,但我认为命名空间存在问题。

当我实例化我的类 MainController 时,出现以下错误: 类“MainController”不存在

这里是我的 MainController.php 中的命名空间声明:

    namespace App\Controllers;

    use Silex\Application;

    class MainController implements \Silex\ControllerProviderInterface { 
....

在我的 app.php 中:

$app->mount("/", new \App\Controllers\MainController());

我的 composer.json 中有一个自动加载功能:

    "autoload": {
    "psr-4": {"App\\": "app/"}
}

我的项目结构是这样的:

|--app/
|----app.php
|----控制器/
|-------MainController.php
|--网络/
|----index.php

非常感谢您的帮助:)

【问题讨论】:

  • 在添加autoload 部分后,您是否运行composer update 来更新您的自动加载器?
  • 是的尝试安装/更新但没有成功...

标签: php class namespaces autoload silex


【解决方案1】:

我相信您的问题是由您将目录命名为controllers 的方式引起的。根据有关PSR-4标准的文档:

5) 全限定类名中的字母字符可以是小写和大写的任意组合。

6) 所有类名必须以区分大小写的方式引用。

因此,将您的目录重命名为 Controllers 并重新运行 composer update

另外,请查看ServiceControllerProvider,了解将控制器实例设置为回调的正确方法。传递新实例可能不是最好的(如果不是错误的)做事方式。你应该这样做:

$app->get('/', 'App\\Controllers\\MainController::index');

【讨论】:

  • 使用mount 与使用get 非常不同,并且OP 正确使用它。
  • 我说的不是mountget(在我的例子中,这只是一个例子)。当 OP 设法加载他的类时,很可能会出现错误,因为他没有提供有效的可调用操作。我只是指控制器/动作部分,但重点是。
  • 我尝试通过 Controllers 更改控制器并运行 composer update 但没有成功...
  • 好的,我做了一些小改动,现在它可以工作了,我不知道为什么但没关系,哈哈……所以非常感谢,即使我不知道它是如何完成的^^。再见,祝你有美好的一天。
  • 我指的是你的回答中以“另外,采取...”开头的部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-19
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 1970-01-01
  • 2018-08-01
相关资源
最近更新 更多