这是有关如何使用 Laravel Data:
创建数据传输对象 (DTO) 的分步示例首先,使用 Composer 安装 spatie/laravel-data 包。该软件包有助于创建 DTO 并有效管理数据。
composer require spatie/laravel-data
安装包后,我们可以创建一个DTO类来处理数据传输。假设我们有一个 User 实体,我们想创建一个 DTO 来传输用户数据。
运行以下 Artisan 命令来生成新的 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