rollerworks/password-strength-validator
Symfony Validator password strength constraints with two approaches: validate by strength levels (weak/medium/strong) or by explicit requirements (letters, mixed case, numbers, special chars). PHP 8.4+ and Symfony 7.4+.
Illuminate\Validation\Validator) via a bridge layer (e.g., Symfony’s Validator as a service).Illuminate\Validation\Validator can extend or replace rules via Validator::extend(). The package’s core logic (e.g., entropy checks, pattern matching) can be adapted into Laravel-compatible constraints.PasswordStrengthValidator class wrapping Symfony’s logic).Constraint system differs from Laravel’s Rule objects. May need mapping logic (e.g., new PasswordStrength(['level' => 'strong']) → Laravel-compatible rule).PasswordStrengthValidator::calculateEntropy()) could add minor overhead during validation. Benchmark if used in high-throughput flows.Rule types), the adapter may need updates.{{ value }} placeholders vs. Laravel’s {{ attribute }})?Illuminate\Validation\Rules\Password) or other PHP packages (e.g., zxcvbn-php for real-time strength estimation).spatie/laravel-symfony-support or custom integration).Illuminate\Validation) is sufficient.rollerworks/password-strength-validator and symfony/validator via Composer.app/Services/PasswordStrengthValidator.php) to expose Symfony’s constraints as Laravel-compatible rules.use Rollerworks\PasswordStrengthValidator\Constraints as PasswordConstraints;
use Symfony\Component\Validator\Validator\ValidatorInterface;
class LaravelPasswordStrengthValidator {
public function __construct(private ValidatorInterface $validator) {}
public function validate(string $password, array $config): bool {
$constraint = new PasswordConstraints\PasswordStrength($config);
$errors = $this->validator->validate($password, $constraint);
return empty($errors);
}
}
Validator with a custom rule:
Validator::extend('password_strength', function ($attribute, $value, $parameters) {
$validator = app(LaravelPasswordStrengthValidator::class);
return $validator->validate($value, $parameters);
});
public function rules() {
return [
'password' => ['required', 'password_strength:level=strong'],
];
}
{{ value }} to {{ attribute }}).app/Providers/AppServiceProvider:
Validator::extend('password_strength', ..., function ($attribute, $value, $parameters, $validator) {
// Custom error messages
$validator->addReplacer('password_strength', function ($message, $attribute, $rule, $parameters) {
return str_replace('{{ value }}', 'your password', $message);
});
});
symfony/validator may conflict with Laravel’s symfony/console or symfony/http-foundation. Use composer why-not to resolve.bcrypt) is separate from validation.min:8|confirmed) with the new validator incrementally.rollerworks/password-strength-validator and symfony/validator to specific versions to avoid breaking changes.$errors = $validator->validate($password, $constraint);
\Log::debug('Symfony validation errors:', $errors->getErrorsAsString());
bcrypt) is separate from validation to avoid redundant work.| Scenario | Impact | Mitigation |
|---|---|---|
| Symfony Validator breaking change | Validation fails silently | Pin to a stable Symfony version |
| PHP 8.4+ upgrade issues | Package incompatibility | Test in staging before production |
| Custom rule misconfiguration | False positives/negatives | Unit tests for edge cases |
| Dependency bloat | Increased deploy size | Audit unused Symfony components |
ValidatorInterface to test the wrapper.How can I help you explore Laravel packages today?