为什么我必须运行"composer dump-autoload"命令才能使迁移工作在laravel中?

Has*_*our 53 php laravel laravel-5

我在我的应用程序中构建了一些迁移类来创建我需要的表,但是我一直在收到错误.我需要运行这个命令:

composer dump-autoload

只有这样它才能按预期再次运作.我做错了会产生此错误,或者这是迁移的正常行为吗?

以下是运行迁移过程时出现的错误:

  [Symfony\Component\Debug\Exception\FatalErrorException]  
  Class 'CreateVideoStatusTable' not found  
Run Code Online (Sandbox Code Playgroud)

Due*_*nna 68

好的,所以我想我知道你遇到的问题.

基本上,因为Composer无法看到您正在创建的迁移文件,所以您必须运行dump-autoload命令,该命令不会下载任何新内容,但会查找需要再次包含的所有类.它只是重新生成需要包含在项目中的所有类的列表(autoload_classmap.php),这就是您运行该命令后迁移工作的原因.

如何修复它(可能)您需要在composer.json文件中添加一些额外的信息.

"autoload": {
    "classmap": [
        "PATH TO YOUR MIGRATIONS FOLDER"
    ],
}
Run Code Online (Sandbox Code Playgroud)

您需要将迁移文件夹的路径添加到classmap数组中.然后运行以下三个命令......

php artisan clear-compiled 
composer dump-autoload
php artisan optimize
Run Code Online (Sandbox Code Playgroud)

这将清除当前编译的文件,更新它所需的类,然后将它们写回,这样您就不必再这样做了.

理想情况下,您可以执行composer dump-autoload -o,以加快网页的加载速度.它不是默认的唯一原因是因为生成需要更长的时间(但只是稍微有点明显).

希望你能设法得到这个排序,因为它非常讨厌的确实:(

  • 我不明白为什么laravel没有处理这个问题,这是一个很好的框架. (5认同)
  • 对不起,你需要使用作曲家,而不是php工匠.所以它的作曲家dump-autoload (4认同)

小智 12

你应该运行:

composer dump-autoload
Run Code Online (Sandbox Code Playgroud)

如果不起作用你应该重新安装composer


Dan*_* W. 6

简短回答:类映射是静态的,而 PSR 自动加载是动态的。

如果您不想使用类映射,请改用 PSR 自动加载。