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

Http Laravel Package

nette/http

Nette HTTP provides a clean, lightweight HTTP layer for PHP apps. It handles requests, responses, headers, cookies, sessions, and URL utilities with a consistent API, making it easy to build frameworks, middleware, or standalone services.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup in Laravel

To integrate nette/http into a Laravel project, install via Composer:

composer require nette/http

First Use Case: Handling Requests

use Nette\Http\Request;
use Nette\Http\Url;

// In a Laravel controller or middleware
public function handle(Request $request)
{
    $url = $request->getUrl();
    $query = $url->getQueryParameters();

    // Access POST data
    $postData = $request->getPost();

    // Access GET parameters
    $getData = $request->getQueryParameters();

    return response()->json([
        'query' => $query,
        'post' => $postData,
        'get' => $getData,
    ]);
}

Registering the Request Factory (Laravel Service Provider)

// app/Providers/NetteHttpServiceProvider.php
namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Nette\Http\RequestFactory;

class NetteHttpServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->singleton(RequestFactory::class, function () {
            $factory = new RequestFactory();
            $factory->setForceHttps(true); // Force HTTPS behind proxies
            return $factory;
        });
    }
}

Accessing the Request in Laravel

// In a controller or middleware
public function __construct(RequestFactory $requestFactory)
{
    $this->request = $requestFactory->createRequest();
}

Implementation Patterns

1. Request Handling Workflow

// Middleware example
public function handle($request, Closure $next)
{
    $netteRequest = app(RequestFactory::class)->createRequest();
    $url = $netteRequest->getUrl();

    // Check for HTTPS behind proxies
    if ($netteRequest->isSecure() === false && config('app.force_https')) {
        return redirect()->secure($url);
    }

    return $next($request);
}

2. URL Manipulation

// Generate absolute URLs
$url = new Url('https://example.com');
$absoluteUrl = $url->setPath('/products')->setQuery(['id' => 123]);

// Resolve relative URLs
$baseUrl = new Url('https://example.com/base');
$relativeUrl = new Url('/relative/path');
$resolvedUrl = $baseUrl->resolve($relativeUrl);

3. Session Management

// In a Laravel service or controller
public function __construct(Session $session)
{
    $this->session = $session;
}

// Store data
$this->session->set('user', ['name' => 'John']);

// Retrieve data
$user = $this->session->get('user');

// Section-based storage
$cart = $this->session->getSection('cart');
$cart->addItem('product1');

4. File Uploads

// Handle file uploads in a controller
public function upload(Request $request)
{
    $file = $request->getFile('document');

    if ($file->isOk()) {
        $path = $file->getSanitizedName();
        $file->moveTo($path, false);

        return response()->json(['success' => true]);
    }

    return response()->json(['error' => 'Upload failed'], 400);
}

5. Response Customization

// Custom response headers
$response = new Response();
$response->setHeader('X-Custom-Header', 'value');
$response->setCookie('theme', 'dark', ['expire' => time() + 3600]);

// Send file
$response->sendAsFile('/path/to/file.pdf', 'document.pdf');

6. Integration with Laravel Middleware

// app/Http/Middleware/NetteRequestMiddleware.php
public function handle($request, Closure $next)
{
    $netteRequest = app(RequestFactory::class)->createRequest();

    // Attach Nette request to Laravel request
    $request->merge([
        'nette_request' => $netteRequest,
        'nette_url' => $netteRequest->getUrl(),
    ]);

    return $next($request);
}

Gotchas and Tips

1. Proxy and HTTPS Handling

  • Force HTTPS behind proxies:
    $factory = new RequestFactory();
    $factory->setForceHttps(true); // Overrides server environment
    
  • Trust proxies:
    $factory->setTrustedProxies(['192.168.1.1', '10.0.0.1']);
    

2. Session Pitfalls

  • Auto-start sessions:
    // Disable auto-start to avoid session file creation on spoofed IDs
    $session->setAutoStart(false);
    
  • Read-and-close mode:
    $session->setReadAndClose(true); // Useful for performance in read-heavy apps
    
  • Section cleanup:
    $session->getSection('temp')->clean(); // Manually clean sections
    

3. URL and Query Handling

  • Parse query strings safely:
    $query = Url::parseQuery('key=value&key2=value2');
    // Returns ['key' => 'value', 'key2' => 'value2']
    
  • Avoid deprecated methods:
    // Use instead of deprecated:
    $url->getQueryParameters(); // ✅
    // $url->getQuery(); // ❌ Deprecated
    

4. File Upload Security

  • Sanitize filenames:
    $safeName = $file->getSanitizedName(); // Removes unsafe chars
    
  • Detect image types:
    if ($file->isImage()) {
        $size = $file->getImageSize(); // Returns [width, height]
    }
    

5. Response Quirks

  • Cookie SameSite attributes:
    $response->setCookie('user', '123', [
        'expire' => time() + 3600,
        'sameSite' => 'Lax', // or 'Strict', 'None'
    ]);
    
  • Avoid duplicate cookies:
    $response->removeCookie('old_cookie');
    

6. Debugging Tips

  • Inspect the full request:
    dd($request->getHeaders(), $request->getPost(), $request->getFiles());
    
  • Check URL parsing:
    $url = new Url('https://example.com/path?query=value');
    dd($url->getPath(), $url->getQueryParameters());
    

7. Laravel-Specific Integration

  • Extend Laravel’s Request class:
    // app/Http/NetteRequest.php
    use Nette\Http\Request as NetteRequest;
    
    class NetteRequest extends \Illuminate\Http\Request
    {
        public function getNetteRequest()
        {
            return app(\Nette\Http\RequestFactory::class)->createRequest();
        }
    }
    
  • Override Laravel’s session with Nette’s:
    // In AppServiceProvider boot()
    $this->app->singleton(\Illuminate\Session\SessionManager::class, function () {
        $netteSession = new \Nette\Http\Session();
        return new \Illuminate\Session\Store($netteSession);
    });
    

8. Performance Optimizations

  • Reuse RequestFactory:
    // Cache the factory in a singleton
    $factory = new RequestFactory();
    $factory->setTrustedProxies(config('app.trusted_proxies'));
    
  • Avoid session auto-start:
    $session->setAutoStart(false);
    $session->start(); // Manually start only when needed
    

9. Deprecation Warnings

  • Avoid these:
    // ❌ Deprecated
    $url->getBasePath();
    $request->getReferer();
    $session->getIterator();
    
    // ✅ Use instead
    $url->getPath();
    $request->getUrl()->getReferer();
    $session->getSectionNames();
    

10. Common Errors and Fixes

Error Solution
session_start(): Cannot send session cookie Ensure cookieDomain and cookiePath are correctly set in HttpExtension.
Url::parseQuery() fails on ; Use Url::parseQuery('key=val;key2=val2', ';') to specify custom separator.
FileUpload returns false for images Check getimagesize() permissions or use isImage() first.
SameSite cookie issues Set sameSite to 'Lax', 'Strict', or 'None' explicitly.
RequestFactory ignores proxies Ensure trustedProxies includes all proxy IPs and X-Forwarded-* headers are present.
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.
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope