ramaid/hypervel-formstate

Reusable form state handling and validation redirect macros for Hypervel.

dev-main 2025-07-09 15:46 UTC

This package is auto-updated.

Last update: 2025-07-09 15:50:30 UTC


README

Tests Static Analysis Latest Stable Version Total Downloads License

Standardized form error and input state handling for Hypervel apps.

โœจ Features

  • ๐Ÿ“ Automatically shares old input and errors 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

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Run tests and quality checks
  5. Commit your changes (git commit -m 'Add amazing feature')
  6. Push to the branch (git push origin feature/amazing-feature)
  7. 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