Laravel 迁移:Class "not found"
Laravel 迁移:Class "not found"
我正在将一个 Laravel 的裸项目部署到 Microsoft Azure,但是每次我尝试执行php artisan migrate
时都会出现错误:
[2015-06-13 14:34:05] production.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message '找不到类'' in D:\home\site\vendor\laravel\framework\src\Illuminate\Database\Migrations\Migrator.php:328
堆栈跟踪:
#0 {main}
可能是什么问题?非常感谢。
-- 编辑 --
迁移类
bigIncrements('id'); $table->string('name', 50); $table->string('surname', 50); $table->bigInteger('telephone'); $table->string('email', 50)->unique(); $table->string('username', 50)->unique(); $table->string('password', 50); $table->boolean('active')->default(FALSE); $table->string('email_confirmation_code', 6); $table->enum('notify', ['y', 'n'])->default('y'); $table->rememberToken(); $table->timestamps(); $table->index('username'); }); } /** * 撤销迁移。 * * @return void */ public function down() { Schema::drop('users'); } }
当运行迁移时,如果出现“Class not found”错误,请尝试运行以下命令:
composer dump-autoload
,然后重新运行迁移命令。更多详情请参考官方网站(#Running Migrations):http://laravel.com/docs/master/migrations#running-migrations。
如果上述方法仍然无效,持续出现“not found”错误。我已经注释掉了默认的迁移文件(users和password_resets),以免出现"SQLSTATE[42000]: Syntax error specified key was too long; max key length is 767 bytes (SQL error)"
([Illuminate\Database\QueryException]
和[PDOExeption]
)。这些文件是默认的!为什么我无法正常使用这些命令...而且migrate:reset和:rollback命令给出Nothing to rollback.
的错误提示。你能帮忙解决吗?
解决方法:运行composer dump-autoload
命令可以重新加载Laravel项目的自动加载器,从而解决“Class not found”错误。如果这个方法无效,可能是因为默认的迁移文件被注释掉了,导致无法正常使用迁移命令。可以尝试取消注释这些默认迁移文件,然后重新运行迁移命令。另外,如果migrate:reset和:rollback命令提示Nothing to rollback.
,可能是因为还没有进行过任何迁移操作,或者已经回滚到了最初的状态,没有可以回滚的内容。
Laravel migrations: Class "not found"问题的出现原因是因为迁移文件没有命名空间,所以无法通过命名空间机制进行自动加载。解决方法是将迁移文件夹放在"classmap"数组中,并且不要在"autoload"头部的psr-4对象中包含它。然后运行一系列命令来重新生成自动加载映射。首先运行"php artisan clear-compiled"命令清除所有已编译的自动加载文件,然后运行"php artisan optimize:clear"命令清除Laravel缓存(可选),接下来运行"composer dump-autoload"命令为命名空间类构建自动加载器,最后运行"php artisan optimize"命令优化Laravel应用程序的各个部分并为非命名空间类构建自动加载器。从此以后,就不需要再次执行这些命令,任何新的迁移都会正常工作。
这样操作的原因是因为迁移文件没有命名空间,所以尝试通过命名空间机制(如psr-4等)进行自动加载是无意义的。composer.json文件中的classmap类别是为这些类而设计的。上述命令只是根据新的设置重新生成所有自动加载映射。
在执行了第一个命令后,如果尝试运行项目时出现"Erroneous data format for unserializing 'Symfony\Component\Routing\CompiledRoute'"错误,可以按照以下步骤进行修复:1. 删除/bootstrap/cache/routes.php文件;2. 运行composer require symfony/routing:v4.2.0命令;3. 运行php artisan route:cache命令(该步骤可能无法成功完成,因为项目可能使用另一个版本的symfony路由,但无论如何它都会起作用)。
以上就是解决Laravel migrations: Class "not found"问题的原因和解决方法。