ramaid / hypervel-formstate
Reusable form state handling and validation redirect macros for Hypervel.
dev-main
2025-07-09 15:46 UTC
Requires
- php: ^8.2
- hypervel/framework: ^0.2.7
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.0
This package is auto-updated.
Last update: 2025-07-09 15:50:30 UTC
README
Standardized form error and input state handling for Hypervel apps.
โจ Features
- ๐ Automatically shares
old
input anderrors
in all Blade views - ๐ง Provides
FormState::errors()
,::old()
,::value()
helpers - ๐ Adds
response()->withValidationErrors()
macro - ๐ Custom
BaseFormRequest
class with error helpers (old()
,error()
,hasError()
) - ๐จ NEW: Blade directive macros (
@formError
,@formValue
, etc.) - โก NEW: Artisan generator command (
make:form-request
) - โ NEW: Comprehensive test suite with PHPUnit
- ๐ NEW: Static analysis with PHPStan and code formatting with PHP CS Fixer
๐ฆ Installation
composer require ramaid/formstate
๐ Usage
Controller
use App\Http\Requests\LoginRequest; public function store(LoginRequest $request) { $validator = Validator::make($request->all(), [...]); if ($validator->fails()) { return response()->withValidationErrors($validator); } }
Blade Templates
Traditional Way
<input name="email" value="{{ $request->old('email') }}"> @if ($request->hasError('email')) <p>{{ $request->error('email') }}</p> @endif
Using New Blade Directives
<!-- Simple error display --> @formError('email') <!-- Input with old value --> <input name="email" value="@formValue('email', 'default@example.com')"> <!-- Conditional error styling --> <input name="email" class="form-input @formClass('email', 'error', 'success')"> <!-- Complete input with error handling --> @formInput('email', 'email', 'form-input') <!-- Conditional blocks --> @hasFormError('email') <div class="error-container"> <p class="error">@formError('email')</p> </div> @endhasFormError
BaseFormRequest
use Ramaid\FormState\Http\Requests\BaseFormRequest; class LoginRequest extends BaseFormRequest { public function rules(): array { return [ 'email' => 'required|email', 'password' => 'required|min:8', ]; } public function messages(): array { return [ 'email.required' => 'We need your email address!', ]; } }
๐ฏ Artisan Generator
Generate form request classes easily:
# Basic form request php artisan make:form-request LoginRequest # Nested form request php artisan make:form-request Auth/RegisterRequest
This creates a properly structured form request extending BaseFormRequest
:
<?php namespace App\Http\Requests; use Ramaid\FormState\Http\Requests\BaseFormRequest; class LoginRequest extends BaseFormRequest { public function authorize(): bool { return true; } public function rules(): array { return [ // ]; } // ... additional methods }
๐จ Available Blade Directives
Directive | Purpose | Example |
---|---|---|
@formError('field') |
Display error message | @formError('email') |
@formValue('field', 'default') |
Get old input value | @formValue('name', 'John') |
@formClass('field', 'error', 'success') |
Conditional CSS classes | @formClass('email', 'text-red-500', 'text-green-500') |
@hasFormError('field')...@endhasFormError |
Conditional error blocks | See above example |
@formInput('name', 'type', 'class') |
Complete input with errors | @formInput('email', 'email', 'form-input') |
๐งช Testing
# Run tests composer test # Run tests with coverage composer test-coverage # Run static analysis vendor/bin/phpstan analyse # Fix code style vendor/bin/php-cs-fixer fix
๐ง Development
# Install dependencies composer install # Run quality checks composer test vendor/bin/phpstan analyse vendor/bin/php-cs-fixer fix --dry-run
๐ Requirements
- PHP ^8.1
- Hypervel Framework ^1.0
๐ค Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature
) - Make your changes
- Run tests and quality checks
- Commit your changes (
git commit -m 'Add amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
๐ License
The MIT License (MIT). Please see License File for more information.
๐ฏ Roadmap
- Form builder macros
- Vue.js/Alpine.js integration
- Advanced validation helpers
- Form step wizard support