mirror of
https://github.com/cgsmith/yii2-user.git
synced 2026-02-04 00:02:37 -06:00
3.5 KiB
3.5 KiB
yii2-user Project Guidelines
Project Overview
- Package: cgsmith/yii2-user v1.0.0
- Type: Yii2 user management extension module
- PHP Version: 8.2+ (strict requirement)
- Yii2 Version: 2.0.45+
- Namespace:
cgsmith\user\* - Architecture: Service-oriented with dependency injection
Code Style
declare(strict_types=1);required on all PHP files- PSR-4 autoloading
- Constructor property promotion for DI
- PHPDoc comments on classes and public methods
- Typed properties and return types throughout
- PHPStan for static analysis
Directory Structure
src/
├── commands/ # Console commands (UserController, MigrateFromDektriumController)
├── contracts/ # Interfaces (UserInterface)
├── controllers/ # Web controllers (Security, Registration, Settings, Admin, Recovery, Gdpr)
├── events/ # Event classes (FormEvent, UserEvent, RegistrationEvent)
├── filters/ # Access control (AccessRule)
├── helpers/ # Utilities (Password)
├── messages/ # i18n translations
├── migrations/ # Database migrations
├── models/ # ActiveRecord + Form models
│ └── query/ # Custom query builders
├── services/ # Business logic (User, Registration, Recovery, Token, Mailer)
├── views/ # View templates
├── Bootstrap.php # Module bootstrap
└── Module.php # Main module class
Key Patterns
Service Layer
Business logic lives in services, not controllers:
UserService- User CRUD, block/unblockRegistrationService- Registration workflow with transactionsRecoveryService- Password recovery flowTokenService- Token generation/validationMailerService- Email sending abstraction
Custom Query Builders
Fluent interface methods in models/query/:
active(),confirmed(),unconfirmed(),blocked(),pending()canLogin(),byEmail(),byUsername()
Event System
Controllers trigger events for extensibility:
EVENT_BEFORE_LOGIN,EVENT_AFTER_LOGINEVENT_BEFORE_REGISTER,EVENT_AFTER_REGISTEREVENT_BEFORE_CONFIRM,EVENT_AFTER_CONFIRM
Model Customization
Override models via modelMap configuration in Module.
Database Tables
user- User accounts with status, IP tracking, timestampsuser_profile- Extended user info (bio, avatar, gravatar)user_token- Confirmation and recovery tokensuser_social_account- Reserved for future OAuth
Console Commands
php yii user/create <email> [password]
php yii user/delete <email>
php yii user/confirm <email>
php yii user/password <email> [password]
php yii user/block <email>
php yii user/unblock <email>
php yii migrate-from-dektrium/migrate
Testing
- PHPUnit 10.0+ configured
- PHPStan 1.10+ for static analysis
- Run tests:
./vendor/bin/phpunit - Run static analysis:
./vendor/bin/phpstan analyse
Important Entry Points
Module.php- Configuration and model factoryBootstrap.php- DI container bindings and route registrationcontrollers/SecurityController.php- Login/logoutcontrollers/RegistrationController.php- User registrationmodels/User.php- Core user model implementing IdentityInterface
When Making Changes
- Maintain strict typing with proper return types
- Use service layer for business logic, keep controllers thin
- Trigger events for extensibility
- Use custom query methods for database queries
- Support model map configuration for overridable models
- Add PHPDoc for new classes/public methods