5

現在Laravel5.1を使用しています。

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 Code Sniffer は、 「各クラスは少なくとも 1 レベルの名前空間にある必要があります」という非標準のメッセージを指摘します。

[ https://laravel.com/docs/5.1/migrations]と上位バッチの検索結果の両方で回答が得られませんでした。関連するstackoverflowに関する質問も私にはわかりません。

誰か理由を知っているか、ヒントを教えてください。ありがとう!

4

1 に答える 1

7

基本的には設計の問題です。名前空間の移行を使用している人がいます。しかし、マイグレーションがロードされ、マイグレーション データベース テーブルに格納される方法は、マイグレーションに名前空間を持たせることが問題になる可能性があります。少し調べてみると、クラスの名前が移行ファイルの名前の一部であり、Laravel はその名前を使用して移行クラスをインスタンス化し、それを実行する必要があることがわかります。たとえば、名前空間を持つと、同じ基本クラス名 (クラス名から名前空間を引いたもの) を持つ 2 つの異なるクラスが生成され、衝突して見つけるのが非常に困難になります。その解決策は、名前空間を移行ファイル名に追加することですが、次のような名前にする必要があります

2015_12_16_164131_database_migrations|create_users_table.php

これはクラスに変換されます

Database\Migrations\CreateUsersTable

ファイル (クラス) 名から名前空間を分離するために使用|していますが、全体が少し奇妙になりましたね。

また、移行は特定の順序で実行する必要があるため、移行ファイル名の先頭にある日付とタイムスタンプは必須です。これが理由の一部です。

于 2016-12-20T02:36:11.437 に答える