指尖上的记忆指尖上的记忆
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
首页
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
symfony7下Enum使用from创建一个Enum对象
if (!empty(array_intersect($userRoles, $allowedRoles))) {
    $actionEnum = SubmissionActionEnum::from($actionValue);
    $actionsData[] = new Dto\Query\Submission\Dashboard\SubmissionActionDto(
        $actionEnum->name,
        $actionEnum->value
    );
}
代码分析

这段 Symfony 7 中的 PHP 代码逻辑如下:


✅ 作用总结:

判断当前用户角色是否包含在允许的角色中,如果是,则将某个 enum 类型的 action 组装成一个 SubmissionActionDto 对象,并添加到 $actionsData 数组中。


🔍 逐行分析:
if (!empty(array_intersect($userRoles, $allowedRoles))) {
  • array_intersect($userRoles, $allowedRoles) 取出 $userRoles 和 $allowedRoles 中共同存在的角色。
  • !empty(...) 如果两者有交集(即用户具有至少一个允许的角色),才执行下面的代码。

$actionEnum = SubmissionActionEnum::from($actionValue);
  • SubmissionActionEnum::from($actionValue) 使用 PHP 8.1+ 的 Backed Enums 功能,从 $actionValue(应该是枚举的值,比如字符串或整数)生成一个 SubmissionActionEnum 枚举对象。
  • 这个方法在无法匹配时会抛出 ValueError。

$actionsData[] = new Dto\Query\Submission\Dashboard\SubmissionActionDto(
    $actionEnum->name,
    $actionEnum->value
);
  • 创建一个新的 SubmissionActionDto 实例,传入:

    • $actionEnum->name:枚举的名称(如 SendReminder)
    • $actionEnum->value:枚举的值(如 "send_reminder")
  • 最后把这个 DTO 加入 $actionsData 数组中,供后续处理(比如返回前端、渲染列表等)。


📌 示例:

假设:

$userRoles = ['ROLE_ADMIN'];
$allowedRoles = ['ROLE_ADMIN', 'ROLE_MANAGER'];
$actionValue = 'send_reminder';

enum SubmissionActionEnum: string {
    case SendReminder = 'send_reminder';
    case Archive = 'archive';
}

则:

  • array_intersect($userRoles, $allowedRoles) 为 ['ROLE_ADMIN'],非空
  • SubmissionActionEnum::from('send_reminder') 返回枚举对象 SubmissionActionEnum::SendReminder
  • 创建一个 DTO:new SubmissionActionDto('SendReminder', 'send_reminder')

✅ 总结:

该段代码是典型的“权限判断后,执行特定操作并封装数据”逻辑:

  • 权限检查: 用户是否有权进行某个动作
  • 动作转换: 将字符串 $actionValue 转换为枚举
  • 数据封装: 使用 DTO 封装并保存结果