2016-12-20 76 views
3

我現在正在使用Laravel 5.1。爲什麼Laravel遷移類沒有名稱空間?

通過php artisan make:migration create_users_table --create=users命令生成的遷移類文件,會是這樣:

<?php 

use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreateUsersTable extends Migration 
{ 
    // up and down ... 
} 

當我編輯該遷移的類文件,並保存它,PHP代碼嗅探器在我崇高的文本會指出非標準消息'每個類必須位於至少一個級別'的命名空間中。

我在[https://laravel.com/docs/5.1/migrations]和頂級批次搜索結果中都沒有得到答案。在stackoverflow上的相關問題也不清楚我。

任何人都知道原因,或給我一些提示?謝謝!

回答

4

這是一個設計問題,基本上。有些人使用命名空間遷移。但是,遷移由遷移器加載並存儲在遷移數據庫表中的方式可能會讓他們命名空間成爲問題。如果你稍微檢查一下,你會發現類的名字是遷移文件名稱的一部分,Laravel需要使用這個名字來實例化遷移類來執行它。例如,命名空間可以導致2個不同的類具有相同的基類名稱(類名減去命名空間),這將會發生碰撞並且很難找到。一種用於該解決方案是將命名空間添加到遷移文件名,但他們將不得不將其命名爲類似

2015_12_16_164131_database_migrations|create_users_table.php 

這將轉化爲一類

Database\Migrations\CreateUsersTable 

我使用|到將命名空間與文件(類)名稱分開,但整個事情有點奇怪,不'你認爲?

此外,由於遷移需要按照一定的順序執行,因此遷移文件名開頭的日期和時間戳是必需的,因此,這就是某些情況。

+0

我不太明白你上面提到的'解決方案',它是否已經被laravel實現了,或者只是一個例子來解釋'如果遷移類有一個命名空間'? – cjli

相關問題