定制 gryfoss/mvc-vm-normalizer 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

gryfoss/mvc-vm-normalizer

最新稳定版本:v2.0.0

Composer 安装命令:

composer require gryfoss/mvc-vm-normalizer

包简介

Symfony MVC View Model Normalizer - provides DefaultViewModel attribute and normalizer for intermediate layer between data models and view serialization

README 文档

README

Tests Coverage PHP Tests

This adds the DefaultViewModel attribute into the system and a Symfony Serializer normalizer that automatically transforms entities into their designated ViewModels during serialization.

✨ Features

  • Attribute-based Configuration: Use #[DefaultViewModel] to specify ViewModels
  • SerializedName Support: Full support for #[SerializedName('alias')] attributes
  • Nested Object Handling: Automatic handling of nested ViewModels
  • Collection Support: Transform arrays/collections of objects
  • 100% Test Coverage: Comprehensive PHPUnit + Behat test coverage
  • CI/CD Ready: Complete GitHub Actions workflows

🚀 Quick Start

Installation

composer require gryfoss/mvc-vm-normalizer

Configuration

Configure the normalizer in your services.yaml:

  GryfOSS\Mvc\Normalizer\DefaultViewModelNormalizer:
    tags:
      - { name: serializer.normalizer, priority: 100 }

Basic Usage

  1. Add the attribute to your entities:
#[DefaultViewModel(viewModelClass: UserViewModel::class)]
class User implements NormalizableInterface
{
    public function __construct(
        private string $firstName,
        private string $lastName,
        private int $age
    ) {}

    // getters...
}
  1. Create your ViewModel:
class UserViewModel implements ViewModelInterface
{
    public function __construct(private User $user) {}

    #[SerializedName('n')]
    public function getName(): string
    {
        return $this->user->getFirstName() . ' ' . $this->user->getLastName();
    }

    #[SerializedName('a')]
    public function getAge(): int
    {
        return $this->user->getAge();
    }
}

Result:

{
  "n": "John Doe",
  "a": 30
}

🧪 Testing

Run All Tests

./bin/run-ci-tests.sh

Individual Test Suites

# PHPUnit tests with coverage
XDEBUG_MODE=coverage ./vendor/bin/phpunit --coverage-text

# Behat acceptance tests
./vendor/bin/behat

# Coverage verification
php bin/check-coverage.php

📚 Documentation

🤝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Run tests: ./bin/run-ci-tests.sh
  4. Ensure 100% coverage
  5. Submit a pull request

📄 License

This project is licensed under the MIT License.

统计信息

  • 总下载量: 178
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2025-08-18