承接 nowo-tech/password-toggle-bundle 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

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

nowo-tech/password-toggle-bundle

Composer 安装命令:

composer require nowo-tech/password-toggle-bundle

包简介

Symfony bundle providing a password form type with toggle visibility feature

README 文档

README

CI Packagist Version Packagist Downloads License PHP Symfony

Found this useful? Give it a star on GitHub! It helps us maintain and improve the project.

Symfony bundle providing a password form type with toggle visibility feature.

Password Toggle Bundle Demo

Documentation

Additional documentation

Features

  • ✅ Password form type with toggle visibility
  • ✅ Customizable icons and labels
  • No Stimulus / no extra asset bundle — toggle uses inline onclick / onkeydown (see toggle_password_widget.html.twig) for compatibility with Live Components
  • ✅ Icons via symfony/ux-icons + symfony/http-client (Flex recipe installs both; graceful fallback + log warning if missing)
  • ✅ Fully configurable CSS classes
  • ✅ Works with Live Components
  • ✅ Accessibility support (ARIA labels, keyboard navigation)
  • ✅ Configuration validation with clear error messages
  • ✅ Type validation for all options
  • ✅ Can be disabled per field (renders simple password input)
  • ✅ Symfony Flex recipe for automatic installation (ux-icons + http-client + icon assets from recipe 1.2.3+)

Installation

composer require nowo-tech/password-toggle-bundle

Then, register the bundle in your config/bundles.php:

<?php

return [
  // ...
  Nowo\PasswordToggleBundle\NowoPasswordToggleBundle::class => ['all' => true],
];

Note: If you're using Symfony Flex, the bundle will be registered automatically and a default configuration file will be created at config/packages/nowo_password_toggle.yaml.

Configuration

When installed via Symfony Flex, a default configuration file is automatically created at config/packages/nowo_password_toggle.yaml. If you're not using Flex or the file wasn't created, you can create it manually.

You can configure default values for all password fields in config/packages/nowo_password_toggle.yaml:

nowo_password_toggle:
  toggle: true
  visible_icon: 'tabler:eye-off'
  hidden_icon: 'tabler:eye'
  visible_label: 'Show'
  hidden_label: 'Hide'
  button_classes: ['input-group-text', 'cursor-pointer']
  toggle_container_classes: ['form-password-toggle']
  use_toggle_form_theme: true
  always_empty: true
  trim: false
  invalid_message: 'The password is invalid.'

These defaults will be used for all PasswordType instances unless overridden when using the form type directly.

Usage

Basic Usage

use Nowo\PasswordToggleBundle\Form\Type\PasswordType;

$builder->add('password', PasswordType::class);

With Options

$builder->add('password', PasswordType::class, [
  'toggle' => true,
  'visible_icon' => 'tabler:eye-off',
  'hidden_icon' => 'tabler:eye',
  'visible_label' => 'Show',
  'hidden_label' => 'Hide',
  'button_classes' => ['input-group-text', 'cursor-pointer'],
  'toggle_container_classes' => ['form-password-toggle'],
]);

Available Options

All options can be configured globally in config/packages/nowo_password_toggle.yaml or overridden per field when using the form type.

Note: All options are validated for correct types. Invalid values will throw exceptions with clear error messages.

Option Type Default Description
toggle bool true Enable/disable toggle functionality. When false, renders a simple password input without toggle button
visible_icon string 'tabler:eye-off' Icon when password is hidden (must be non-empty)
hidden_icon string 'tabler:eye' Icon when password is visible (must be non-empty)
visible_label string 'Show' Label when password is hidden (must be non-empty)
hidden_label string 'Hide' Label when password is visible (must be non-empty)
button_classes array ['input-group-text', 'cursor-pointer'] CSS classes for toggle button (must be an array)
toggle_container_classes array ['form-password-toggle'] CSS classes for container (must be an array)
use_toggle_form_theme bool true Use the bundle's form theme for rendering
always_empty bool true Always render empty value
trim bool false Trim whitespace
invalid_message string 'The password is invalid.' Invalid message (must be non-empty)

Disabling Toggle

You can disable the toggle functionality for a specific field:

$builder->add('password', PasswordType::class, [
  'toggle' => false, // Renders a simple password input without toggle button
]);

When toggle is false, the field renders as a standard password input without the toggle button, making it compatible with any styling or JavaScript framework.

Requirements

  • PHP >= 8.2, < 8.6
  • Symfony >= 7.0 || >= 8.0
  • Symfony UX Icons ^2.0 || ^3.0 and symfony/http-client (same Symfony major) — required for the default Twig template (ux_icon()). Listed as composer suggest on the bundle; Symfony Flex adds both via the recipe. Without Flex:
composer require symfony/ux-icons symfony/http-client
php bin/console ux:icons:lock

If those packages are missing, the toggle still works but icons are omitted; see docs/INSTALLATION.md.

  • Bootstrap 5 (recommended for styling, but not required)

Styling

The bundle includes CSS/SCSS styles for the toggle button. You can use them by:

Option 1: Include the CSS file

<link rel="stylesheet" href="{{ asset('css/toggle_password.css', 'nowo_password_toggle') }}">

Option 2: Use the SCSS file

If you're using a build system (Webpack Encore, Vite, etc.), import the SCSS:

@import '@nowo-tech/password-toggle-bundle/src/Resources/public/css/toggle_password.scss';

Option 3: Custom styles

The bundle uses these CSS classes that you can style:

  • .input-group.input-group-merge - Container
  • .input-group-text.cursor-pointer - Toggle button
  • .icon-base - Icon classes

Example custom styles:

.input-group-text.cursor-pointer {
 cursor: pointer;
 user-select: none;
 transition: all 0.2s ease-in-out;
}

.input-group-text.cursor-pointer:hover {
 background-color: var(--bs-secondary-bg, #f8f9fa);
}

.input-group-text.cursor-pointer:active {
 transform: scale(0.95);
}

.input-group-text.cursor-pointer:focus-visible {
 outline: 2px solid var(--bs-primary, #696cff);
 outline-offset: 2px;
}

Demo Projects

The bundle includes three demo projects demonstrating usage with different Symfony and PHP versions:

  • Symfony 7.0 Demo (PHP 8.2) - Port 8001 (default, configurable via .env)
  • Symfony 8.0 Demo (PHP 8.4) - Port 8001 (default, configurable via .env)
  • Symfony 8.0 Demo with PHP 8.5 - Port 8001 (default, configurable via .env)

Each demo is independent and includes:

  • Complete Docker setup with FrankenPHP (HTTP on port 80). With APP_ENV=dev (default), the image entrypoint uses Caddyfile.dev (no FrankenPHP worker, comfortable local dev). FrankenPHP worker mode is supported and tested in production demo configuration; see docs/DEMO-FRANKENPHP.md.
  • Comprehensive test suite
  • Port configuration via .env file
  • Symfony Web Profiler for debugging (dev and test environments)
  • Properly configured routing with attribute-based routes
  • Bundle configuration file (config/packages/nowo_password_toggle.yaml) demonstrating global configuration (v1.2.0+)

Quick Start with Docker

cd demo
make up-symfony7    # Start Symfony 7.0 demo (specific command)
# Or use generic command: make up symfony7
make install-symfony7  # Install dependencies
# Or use generic command: make install symfony7
# Access at: http://localhost:8001 (default port, configurable via .env)

Or start any other demo:

# Using specific commands
make up-symfony8    # Symfony 8.0
make up-symfony8-php85 # Symfony 8.0 with PHP 8.5

# Or using generic commands with demo name
make up symfony8    # Symfony 8.0
make up symfony8-php85 # Symfony 8.0 with PHP 8.5

See demo/README.md for detailed instructions for all demos.

Development

Using Docker (Recommended)

# Start the container
make up

# Install dependencies
make install

# Run tests
make test

# Run tests with coverage
make test-coverage

# Run all QA checks
make qa

Without Docker

composer install
composer test
composer test-coverage
composer qa

Testing

The bundle targets ≥95% code coverage (CI minimum); current suite is at 100%. All tests are located in the tests/ directory.

Running Tests

# Run all tests
composer test

# Run tests with coverage report
composer test-coverage

# View coverage report
open coverage/index.html

Test Structure

  • tests/Unit/ - Unit tests (bundle class, dependency injection, form type)
  • tests/Integration/ - Integration tests (reserved for integration scenarios)

All classes and methods are fully tested with 100% code coverage.

Code Quality

The bundle uses PHP-CS-Fixer to enforce code style (PSR-12).

# Check code style
composer cs-check

# Fix code style
composer cs-fix

CI/CD

The bundle uses GitHub Actions for continuous integration:

  • Tests: Runs on PHP 8.2, 8.3, 8.4, and 8.5 with Symfony 7.0, 7.4, 8.0, and 8.1
  • PHP 8.2 and 8.3: Symfony 7.0 and 7.4 (Symfony 8.0+ requires PHP 8.4+)
  • PHP 8.4 and 8.5: All supported Symfony versions (7.0, 7.4, 8.0, 8.1)
  • Code Style: Automatically fixes code style on push to main/master
  • Code Style Check: Validates code style on pull requests
  • Coverage: Validates ≥95% code coverage (see MIN_COVERAGE in CI)
  • Dependabot: Automatically updates dependencies

See .github/workflows/ci.yml for details.

Tests and coverage

  • Tests: PHPUnit (PHP)
  • PHP: 89.51%

License

The MIT License (MIT). Please see LICENSE for more information.

Contributing

Please see docs/CONTRIBUTING.md for details on how to contribute to this project.

For information about branching strategy and versioning, see docs/BRANCHING.md.

Author

Created by Héctor Franco Aceituno at Nowo.tech

nowo-tech/password-toggle-bundle 适用场景与选型建议

nowo-tech/password-toggle-bundle 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 464 次下载、GitHub Stars 达 2, 最近一次更新时间为 2025 年 12 月 12 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「symfony」 「form」 「bundle」 「password」 「visibility」 「toggle」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 nowo-tech/password-toggle-bundle 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 nowo-tech/password-toggle-bundle 我们能提供哪些服务?
定制开发 / 二次开发

基于 nowo-tech/password-toggle-bundle 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

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

GitHub 信息

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

其他信息

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