
以下是有关如何使用 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 管理,为开发人员和大型应用程序提供易于使用的功能。
以上就是使用 DTO 简化 Laravel 中的数据传输的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号