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

Symfony Helper Laravel Package

denisok94/symfony-helper

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup for Laravel Integration

Since this package is Symfony-focused, Laravel developers must bridge it via Symfony components or Laravel's Symfony integration. Start by:

  1. Install the package (via Composer):

    composer require denisok94/symfony-helper
    
  2. Leverage Symfony components in Laravel:

    • Use symfony/http-foundation (already included in Laravel) for request/response handling.
    • For controllers, extend Laravel’s Controller class and manually integrate Symfony’s JsonErrorController or AccessDeniedHandler logic.
  3. First Use Case: JSON Error Responses Replace Laravel’s default error handler with Symfony’s JsonErrorController:

    // app/Exceptions/Handler.php
    use Denisok94\SymfonyHelper\Controller\JsonErrorController;
    
    public function render($request, Throwable $exception)
    {
        return (new JsonErrorController())->show($request, $exception);
    }
    

Implementation Patterns

1. Controller Inheritance (Symfony-Style)

  • Pattern: Use Symfony’s parent service configuration to enforce controller inheritance (e.g., ApiRestController).
  • Laravel Workaround: Create a base controller (e.g., App\Http\Controllers\ApiRestController) and extend it in your routes:
    // routes/api.php
    Route::get('/users', [App\Http\Controllers\ApiRestController::class, 'index']);
    
    Manually replicate Symfony’s parent behavior via traits or middleware.

2. Security: JSON Access Denied Responses

  • Pattern: Replace Symfony’s AccessDeniedHandler for JSON responses.
  • Laravel Integration: Override Laravel’s Authenticate middleware to use the Symfony handler:
    // app/Http/Middleware/Authenticate.php
    use Denisok94\SymfonyHelper\Security\AccessDeniedHandler;
    
    public function handle($request, Closure $next, ...$guards)
    {
        try {
            return $next($request);
        } catch (AuthenticationException $e) {
            return (new AccessDeniedHandler())->handle($e, $request);
        }
    }
    

3. Request/Response Utilities

  • Pattern: Use Symfony’s Request/Response classes for consistency.
  • Laravel Example:
    use Symfony\Component\HttpFoundation\Request;
    use Symfony\Component\HttpFoundation\Response;
    
    public function show(Request $request)
    {
        return new Response(json_encode(['data' => 'test']), 200, ['Content-Type' => 'application/json']);
    }
    

4. Configuration via YAML

  • Pattern: Migrate Symfony’s services.yaml/framework.yaml to Laravel’s config/ files.
  • Example:
    # config/symfony_helper.php
    controller_parent: 'denisok94.controller.api_rest_controller'
    error_controller: Denisok94\SymfonyHelper\Controller\JsonErrorController::class
    

Gotchas and Tips

1. Laravel-Symfony Compatibility Pitfalls

  • Issue: Symfony’s Bundle system doesn’t work in Laravel. Solution:
    • Use the package’s classes directly (e.g., JsonErrorController) without bundle registration.
    • Avoid bundles.php; Laravel uses config/app.php for service providers.
  • Tip: Prefix Symfony classes in Laravel’s config/services.php:
    'Denisok94\SymfonyHelper\Controller\JsonErrorController' => \Denisok94\SymfonyHelper\Controller\JsonErrorController::class,
    

2. Middleware vs. Handlers

  • Gotcha: Symfony’s AccessDeniedHandler expects a JsonResponse. In Laravel, ensure your middleware returns a JsonResponse or convert it:
    use Symfony\Component\HttpFoundation\JsonResponse;
    
    return new JsonResponse(['error' => 'Unauthorized'], 403);
    

3. Debugging JSON Errors

  • Tip: Override Laravel’s App\Exceptions\Handler to log Symfony errors:
    public function register()
    {
        $this->renderable(function (Throwable $e, $request) {
            Log::error('Symfony Error: ' . $e->getMessage());
            return (new JsonErrorController())->show($request, $e);
        });
    }
    

4. Extending Functionality

  • Extension Point: The package lacks Laravel-specific features (e.g., Eloquent integration). Workaround:
    • Create a Laravel wrapper trait:
      // app/Traits/SymfonyHelperTrait.php
      use Denisok94\SymfonyHelper\Helper;
      
      trait SymfonyHelperTrait {
          protected function symfonyHelper() {
              return new Helper();
          }
      }
      
    • Use it in controllers:
      class MyController extends Controller {
          use SymfonyHelperTrait;
      }
      

5. Performance Considerations

  • Tip: Avoid instantiating Symfony classes (e.g., JsonErrorController) in loops. Cache them:
    $errorController = app()->make(\Denisok94\SymfonyHelper\Controller\JsonErrorController::class);
    

6. Testing

  • Tip: Mock Symfony’s Request/Response in Laravel tests:
    use Symfony\Component\HttpFoundation\Request;
    
    $request = Request::create('/test', 'GET');
    $response = (new JsonErrorController())->show($request, new \Exception('Test'));
    $this->assertEquals(500, $response->getStatusCode());
    

---
```markdown
## Key Takeaway for Laravel Devs
This package is **Symfony-first** but can be **cherry-picked** for Laravel’s JSON APIs, error handling, and request/response utilities. Focus on:
1. **Selective adoption** (e.g., `JsonErrorController` for APIs).
2. **Laravel-Symfony interop** (use Symfony classes where Laravel lacks features).
3. **Configuration translation** (YAML → Laravel’s `config/`).
Avoid bundle dependencies; treat it as a **library of standalone classes**.
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.
bugban/symfony
beyonder-capi/workflow-extensions-bundle
beyonder-capi/job-queue-bundle
capell-app/block-library
axium/identity
cetria/laravel-dummy-models
cetria/reflection-helper
agropredict/sso-auth-bundle
evolvestudio/spam-protection
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
develia/geo-bundle
dreamzy/livewire-charts
touchestate-sdk/php-sdk
22h/doctrine-garbage-collection-bundle
agtp/agtp-php
agtp/mod-php
splash/sonata-admin