Skip to content

Visibility Attributes

Reference for visibility control attributes.

SimpleDTO provides visibility attributes:

  • #[Hidden] - Always hide property
  • #[Visible(callback)] - Conditionally visible
  • 18 Conditional Attributes - See Conditional Attributes

Properties marked as hidden are never included in serialization:

use Event4u\DataHelpers\SimpleDTO\Attributes\Hidden;
#[Hidden]
public readonly string $password;
#[Hidden]
public readonly string $apiToken;

Conditionally visible based on callback:

use Event4u\DataHelpers\SimpleDTO\Attributes\Visible;
#[Visible(callback: 'canViewEmail')]
public readonly string $email;
private function canViewEmail(mixed $context): bool
{
return $context?->role === 'admin';
}
#[Visible(callback: [PermissionChecker::class, 'canViewEmail'])]
public readonly string $email;
#[Visible(gate: 'view-email')]
public readonly string $email;
#[Visible(voter: 'view', attribute: 'email')]
public readonly string $email;

See Conditional Attributes for 18 conditional attributes:

#[WhenAuth] // Show when authenticated
#[WhenRole('admin')] // Show when user has role
#[WhenCan('view-email')] // Show when user has permission
#[WhenValue('status', 'active')] // Show when property equals value
class UserProfileDTO extends SimpleDTO
{
public function __construct(
public readonly string $name,
#[WhenAuth]
public readonly ?string $email = null,
#[Hidden]
public readonly string $password,
#[WhenRole('admin')]
public readonly ?string $ipAddress = null,
) {}
}
// ✅ Good
#[Hidden]
public readonly string $password;
// ❌ Bad
public readonly string $password;
// ✅ Good
#[WhenAuth]
public readonly ?string $email;
  • All passwords are hidden
  • All API tokens are hidden
  • PII is encrypted or hidden
  • Email/phone only visible when authenticated
  • Admin data only visible to admins