Since this package is Symfony-focused, Laravel developers must bridge it via Symfony components or Laravel's Symfony integration. Start by:
Install the package (via Composer):
composer require denisok94/symfony-helper
Leverage Symfony components in Laravel:
symfony/http-foundation (already included in Laravel) for request/response handling.Controller class and manually integrate Symfony’s JsonErrorController or AccessDeniedHandler logic.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);
}
parent service configuration to enforce controller inheritance (e.g., ApiRestController).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.AccessDeniedHandler for JSON responses.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);
}
}
Request/Response classes for consistency.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']);
}
services.yaml/framework.yaml to Laravel’s config/ files.# config/symfony_helper.php
controller_parent: 'denisok94.controller.api_rest_controller'
error_controller: Denisok94\SymfonyHelper\Controller\JsonErrorController::class
Bundle system doesn’t work in Laravel. Solution:
JsonErrorController) without bundle registration.bundles.php; Laravel uses config/app.php for service providers.config/services.php:
'Denisok94\SymfonyHelper\Controller\JsonErrorController' => \Denisok94\SymfonyHelper\Controller\JsonErrorController::class,
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);
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);
});
}
// app/Traits/SymfonyHelperTrait.php
use Denisok94\SymfonyHelper\Helper;
trait SymfonyHelperTrait {
protected function symfonyHelper() {
return new Helper();
}
}
class MyController extends Controller {
use SymfonyHelperTrait;
}
JsonErrorController) in loops. Cache them:
$errorController = app()->make(\Denisok94\SymfonyHelper\Controller\JsonErrorController::class);
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**.
How can I help you explore Laravel packages today?