ホームページ >バックエンド開発 >PHPチュートリアル >10.Laravel5 学習メモ: Laravel でのバッチ割り当ての探索
問題の説明
laravel のシード関数を使用するとき、学生はよく次の例外を目にします
[IlluminateDatabaseEloquentMassAssignmentException]
ユーザー名
この例外は何ですか?つまり、MODEL::create() メソッドを使用すると、Laravel はシステムのセキュリティを確保し、http リクエストによる作成中に誰かが悪意を持って特定のフィールドをデータベースに挿入して損害を引き起こすことを防ぎます。
公式 Web サイトからの引用
大量割り当ての脆弱性は、ユーザーがリクエストを通じて予期しない HTTP パラメーターを渡し、そのパラメーターがデータベース内の予期しない列を変更する場合に発生します。たとえば、悪意のあるユーザーが is_admin を送信する可能性があります。パラメータは HTTP リクエストを通じてモデルの作成メソッドにマッピングされ、ユーザーが管理者にエスカレートできるようになります
正しい使い方まず、Seeder が次のようなものであると仮定します
public function run() { DB::table('addresss')->delete(); Address::create([ 'user_id' => 1, 'identity' => 1, 'longlat' => 'XXXXX', 'province' => 'XXX', 'city' => 'XXX', 'district' => 'XXX', 'detail' => 'XXXX', ]); }
この時点で、Address fillable または Guarded 属性を設定し、
php 職人 db:seed --class="AddressTableSeeder" を直接使用すると、上記のエラーが報告されます。 Address
protected $fillable = ['user_id', 'identity', ];にfillableが設定されているとします
この時点でseedコマンドを実行すると、データベースに新しく追加されたデータはuser_idとidentityの2つのフィールドのみを持つことになります。
上記のプロセスを通じて、バッチ割り当ての意味が明確に理解できます。したがって、作成時にすべてのデータの挿入を完了したい場合は、すべてのフィールドを入力可能に設定する必要があります。
フィールドが多すぎる場合の対処方法時々、テーブル内のフィールドが多すぎることがありますが、フィールドを 1 つずつ入力可能に書き込むのは混乱しすぎると言うことがあります。史上最もエレガントなフレームワークとして知られる Laravel がこれを考慮しないわけがありません。使用できるガード属性もあります。フィールドが多すぎる場合は、一括割り当てを禁止する必要があるフィールドを設定するだけで済みます。
学習に制限はありません!前進を続け、最近ではアプリのバックエンドサービスを提供するためにlaravelを使い始めました。サードパーティの SDK を使用して変換したいくつかのツールを共有しました。
著作権表示: この記事はブロガーによるオリジナル記事であり、許可なく複製することはできません。ブロガーの許可。