Laravel Dataを使用してデータ転送オブジェクト (DTO) を作成する方法のステップバイステップの例を示します:
まず、Composer を使用して spatie/laravel-data パッケージをインストールします。このパッケージは、DTO の作成とデータの効率的な管理に役立ちます。
composer require spatie/laravel-data
パッケージをインストールした後、データ転送を処理するための DTO クラスを作成できます。 User エンティティがあり、ユーザー データを転送するための DTO を作成するとします。
次のアーティザン コマンドを実行して、新しい DTO クラスを生成します:
php artisan make:data UserData
これにより、App/Data ディレクトリ内に UserData クラスが作成されます。
次に、UserData クラスを編集して、DTO に必要なプロパティとデータ型を定義しましょう。
namespace App\Data; use Spatie\LaravelData\Data; class UserData extends Data { public function __construct( public string $name, public string $email, public string $address, public ?string $phone = null // Optional phone field ) {} }
UserData DTO が作成されたので、これをコントローラー内で使用して、受信データを処理し、変換し、アプリケーションのレイヤー間で渡すことができます。
namespace App\Http\Controllers; use App\Data\UserData; use App\Models\User; use Illuminate\Http\Request; class UserController extends Controller { public function store(Request $request) { // Validate the incoming request data $validatedData = $request->validate([ 'name' => 'required|string', 'email' => 'required|email', 'address' => 'required|string', 'phone' => 'nullable|string', ]); // Create a UserData DTO $userData = UserData::from($validatedData); // You can now access $userData->name, $userData->email, etc. User::create([ 'name' => $userData->name, 'email' => $userData->email, 'address' => $userData->address, 'phone' => $userData->phone, ]); return response()->json(['message' => 'User created successfully']); } }
DTO を使用して、応答を返すときにデータを変換することもできます。 UserController の show メソッドを変更して、DTO 経由でユーザー データを返すようにしましょう。
public function show(User $user) { // Convert the User model to UserData DTO $userData = new UserData( name: $user->name, email: $user->email, address: $user->address, phone: $user->phone ); return response()->json($userData); }
ユーザーのリストを取得するなど、データのコレクションを操作している場合、DTO パッケージはコレクションを処理する簡単なメソッドも提供します。
public function index() { $users = User::all(); // Convert the collection of User models to a collection of UserData DTOs $userCollection = UserData::collection($users); return response()->json($userCollection); }
spatie/laravel-data パッケージを使用すると、属性の名前変更や計算フィールドの追加など、変換のカスタマイズが可能になります。
class UserData extends Data { public function __construct( public string $name, public string $email, public string $address, public ?string $phone = null ) {} // Add a custom method to compute a full contact string public function fullContact(): string { return "{$this->name} ({$this->email})"; } }
この DTO を操作するときに、fullContact() を使用してカスタム形式の文字列を取得できるようになりました。
Laravel Data のルール機能を使用して、DTO に検証ルールを直接追加できます。
namespace App\Data; use Spatie\LaravelData\Attributes\Validation\Email; use Spatie\LaravelData\Attributes\Validation\Required; use Spatie\LaravelData\Data; class UserData extends Data { public function __construct( #[Required] public string $name, #[Email] public string $email, public string $address, public ?string $phone = null ) {} }
この実践的なチュートリアルでは、Laravel Data を使用してデータ転送オブジェクト (DTO) を作成および使用する方法を検討しました。 DTO パターンを使用すると、データを明確に管理および変換できるため、アプリケーションのレイヤー間の懸念を確実に分離しながら、コードの保守が容易になります。 spatie/laravel-data パッケージは DTO 管理を簡素化し、開発者と大規模アプリケーションの両方に使いやすい機能を提供します。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3