我有一些命名空间的迁移,我不能让过去由于命名空间中找不到类的错误。 在前面的问题 , 安东尼奥·卡洛斯·里贝罗说:
Laravel迁移不玩与命名空间迁移不错。 在这种情况下,最好的办法是继承和替代迁移类的,像克里斯托弗·皮特在他的博客中解释说: https://medium.com/laravel-4/6e75f99cdb0 。
我曾尝试做(随后所以composer dump-autoload
,当然),但我继续接收找不到类的错误。 我有设置为项目文件
inetpub
|--appTruancy
|--database
|--2015_04_24_153942_truancy_create_districts.php
|--MigrationsServiceProvider.php
|--Migrator.php
迁移文件本身如下:
<?php
namespace Truancy;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class TruancyCreateDistricts extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('districts', function($table) {
$table->string('id')->unique()->primary()->nullable(false);
$table->string('district');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('districts');
}
}
Migrator.php如下:
namespace Truancy; use Illuminate\Database\Migrations\Migrator as Base; class Migrator extends Base{ /** * Resolve a migration instance from a file. * * @param string $file * @return object */ public function resolve($file) { $file = implode("_", array_slice(explode("_", $file), 4)); $class = "Truancy\\" . studly_case($file); return new $class; } }
MigrationServiceProvider.php如下:
<?php
namespace Truancy;
use Illuminate\Support\ServiceProvider;
class TruancyServiceProvider extends ServiceProvider{
public function register()
{
$this->app->bindShared(
"migrator",
function () {
return new Migrator(
$this->app->make("migration.repository"),
$this->app->make("db"),
$this->app->make("files")
);
}
);
}
}
在autoload_classmap.php产生的线是如期望的那样
'Truancy\\Migrator' => $baseDir . '/appTruancy/database/migrations/Migrator.php',
'Truancy\\TruancyCreateDistricts' => $baseDir . '/appTruancy/database/migrations/2015_04_24_153942_truancy_create_districts.php',
'Truancy\\TruancyServiceProvider' => $baseDir . '/appTruancy/database/migrations/MigrationsServiceProvider.php'
我打电话php artisan migrate --path="appTruancy/database/migrations"
和我收到的错误:
PHP Fatal error: Class 'TruancyCreateDistricts' not found in
C:\inetpub\laravel\vendor\laravel\framework\src\Illuminate\Database
\Migrations\Migrator.php on line 297
我知道我必须做一些愚蠢的(我的直觉是$class = "Truancy\\" . studly_case($file);
在Migrator.php是错误的),但我不能拧开这个灯泡。 迁移命令显然是成功地找到我的迁移文件,并正确的类名是在类映射,所以它必须解决从文件,其子类和替换是应该解决的类名本身的过程中的某个地方。 任何建议,在那里我已经错了吗?