Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Put Helper Laravel Package

djunehor/laravel-put-helper

Laravel middleware/helper that makes PUT request payloads easy to access, including uploaded files. Once installed, PUT input and files are available like normal request data, with support for validating file parameters using put_file.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require djunehor/laravel-put-helper
    
    • For Laravel 5.4 or older, manually register the service provider in config/app.php:
      Djunehor\PutHelper\PutHelperServiceProvider::class
      
    • For Lumen, register in bootstrap/app.php:
      $app->register(Djunehor\PutHelper\PutHelperServiceProvider::class);
      
  2. First Use Case:

    • Send a PUT request with form data (e.g., via Postman or frontend form with enctype="multipart/form-data").
    • Access the input data in your controller:
      $name = $request->input('name'); // Works for strings
      $file = $request->file('avatar'); // Use alternative methods (see below)
      

Implementation Patterns

Core Workflow

  1. Middleware Integration: The package adds a global middleware that parses raw input from PUT requests and merges it into the $request object. No manual parsing is required.

  2. Accessing Inputs:

    • Strings: Use $request->input('key') or $request->key (standard Laravel methods).
    • Files: Due to a limitation, avoid $request->file('key'). Instead:
      $file = $request->file_key; // Alternative 1
      $file = $request['file_key']; // Alternative 2
      
  3. Validation: Use the custom put_file rule to validate file uploads:

    $request->validate([
        'avatar' => 'required|put_file',
        'name'   => 'required|string',
    ]);
    
  4. Frontend Integration:

    • Ensure forms use method="PUT" and enctype="multipart/form-data".
    • For APIs, send raw JSON/XML in the request body (the package handles parsing).
  5. Testing: Simulate PUT requests in tests:

    $response = $this->put('/endpoint', [
        'name' => 'Test',
        'avatar' => UploadedFile::fake()->image('avatar.jpg'),
    ]);
    

Gotchas and Tips

Pitfalls

  1. File Access Limitation:

    • $request->file('key') does not work. Use $request->key or $request['key'] instead.
    • Example:
      // ❌ Won't work:
      $file = $request->file('avatar');
      
      // ✅ Works:
      $file = $request->avatar;
      
  2. Middleware Order:

    • Ensure the package’s middleware runs before other middleware that might override $request data (e.g., ConvertEmptyStringsToNull).
  3. Large Payloads:

    • The package reads raw input, which can cause memory issues for very large payloads. Test with edge cases.
  4. Lumen Compatibility:

    • Lumen requires manual registration (see Installation). Forgetting this will break PUT request handling.

Debugging Tips

  1. Verify Middleware: Check if the middleware is registered by inspecting php artisan package:discover or manually verifying app/Http/Kernel.php.

  2. Check Raw Input: Debug the raw input stream to ensure the package is parsing correctly:

    $rawInput = file_get_contents('php://input');
    dd($rawInput); // Verify payload structure
    
  3. Validation Errors: If put_file validation fails unexpectedly, ensure:

    • The file is included in the PUT request.
    • The field name matches exactly (case-sensitive).

Extension Points

  1. Custom Middleware: Override the package’s middleware behavior by publishing its config (if available) or extending the service provider:

    // app/Providers/PutHelperServiceProvider.php
    namespace App\Providers;
    use Djunehor\PutHelper\PutHelperServiceProvider as BaseProvider;
    
    class PutHelperServiceProvider extends BaseProvider {
        public function register() {
            parent::register();
            // Custom logic here
        }
    }
    
  2. File Handling: Extend file parsing logic by modifying the package’s PutHelper class (located in vendor/djunehor/laravel-put-helper/src/PutHelper.php).

  3. Testing: Mock the middleware in tests to isolate behavior:

    $this->app->make(Djunehor\PutHelper\PutHelperMiddleware::class)->handle($request);
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
besmartand-pro/php-quality-config
sentix/ai-chatbot
terminal42/code-quality-tools
codifyo/ts-generator-bundle
testo/fiber
mintobit/jobqueue
a4sex/maintenance-bundle
a4sex/entity-date-update
a4sex/client-identifier
a4sex/base-utilites
a4sex/key-value-storage
a4sex/micro-status
chilldev/dependency-injection-extra
datinglibre/datinglibre-app-api
biberltd/corebundle
bricre/symfony-bundle-test
biberltd/logbundle
dominium/http-adapter-bundle
dominium/google-analytics
a4sex/auto-clean-entity