类、命名空间、bin/console 命令

Classes, Namespacing, bin/console commands

我今天下午才开始使用 Symfony 框架。我转到 "CRUD" 并按照教程使用内置工具生成 CRUD。但是,使用默认命令时出现错误。

Attempted to load class "Task" from namespace "AppBundle\Controller".
Did you forget a "use" statement for another namespace?
500 Internal Server Error - ClassNotFoundException

This 是我关注的视频。

  1. 我从 Symfony 的空白安装开始。
  2. 已连接数据库。
  3. 运行php bin/console generate:doctrine:entity, 写道 AppBundle:Tasks,然后按回车键通过所有选项默认为 创建一个简单的名称和注释字段。
  4. 运行 php bin/console generate:doctrine:crud 编写了 AppBundle:Tasks,并在所有选项默认值中按回车键,但选择是以生成所有 CRUD 命令
  5. 运行 php bin/console doctrine:schema:update --force
  6. 运行 php bin/console cache:clear
  7. 转到 //localhost/symfony/web/app_dev.php/tasks,我被带到列表中,工作正常。
  8. 但是如果我去localhost/symfony/web/app_dev.php/tasks/new或者点击生成的按钮,我会得到上面提到的错误。

错误消息对我来说是希腊语,尽管它已尽最大努力保持礼貌。我可以看到实体下有一个 Tasks.php 文件,它定义了 class "Tasks" 并且 TasksController 设置为 use AppBundle\Entity\Tasks 所以我不知道为什么它不能使用我对这一切的理解有限。

我正在尝试构建一个相当简单的任务管理应用程序,但我对 Symfony 是全新的,并且在 PHP 方面没有扎实的背景。有人可以解释一下我在这个过程中哪里出了问题吗?

要检查的事项:

  • 文件 Task.php 的名称与 class 名称 class Task 相同。注意:class不能是复数,所以Task是对的,Tasks是错的
  • 您的 Controller 命名空间和 class 声明之间有一个 use AppBundle\Entity\Task;

为避免此错误,您可以使用像 Phpstorm(或其他)这样的 PHP IDE,当您忘记添加 use statement.It 时,它会以彩色显示您的语句自动添加:D