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

Encoder Neomerx Laravel Package

laravel-json-api/encoder-neomerx

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation Add the package via Composer:

    composer require laravel-json-api/encoder-neomerx
    

    Ensure neomerx/json-api is also installed (this package depends on it).

  2. Basic Usage Register the encoder in your config/json-api.php under the encoders key:

    'encoders' => [
        \LaravelJsonApi\Encoder\NeomerxEncoder::class,
    ],
    

    Then, encode a resource in a controller or service:

    use LaravelJsonApi\Encoder\NeomerxEncoder;
    
    $encoder = app(NeomerxEncoder::class);
    $resource = new \Neomerx\JsonApi\Resource($data, $type, $id);
    $json = $encoder->encode($resource);
    
  3. First Use Case Use this encoder when you need strict JSON:API compliance (e.g., for APIs consumed by third-party clients expecting exact spec adherence). Ideal for:

    • Public APIs with tight contract requirements.
    • Projects where neomerx/json-api is already in use.

Implementation Patterns

Workflow Integration

  1. Resource Transformation Use the encoder to transform Eloquent models or collections into JSON:API-compliant responses:

    $users = User::all();
    $resources = \LaravelJsonApi\Encoder\NeomerxEncoder::encodeCollection(
        $users,
        new \Neomerx\JsonApi\ResourceCollection(
            $users->map(fn ($user) => new \Neomerx\JsonApi\Resource($user, 'users', $user->id))
        )
    );
    
  2. Customizing Resource Objects Extend \Neomerx\JsonApi\Resource to add custom attributes or relationships:

    class CustomUserResource extends \Neomerx\JsonApi\Resource
    {
        public function getAttributes()
        {
            return parent::getAttributes() + ['custom_field' => $this->customField];
        }
    }
    
  3. Integration with Laravel JSON:API If using laravel-json-api/laravel, pair this encoder with the framework’s serializers for a unified approach:

    $serializer = app(\LaravelJsonApi\Serializers\Serializer::class);
    $serializer->setEncoder(app(NeomerxEncoder::class));
    

Common Patterns

  • Error Handling: Wrap encoding in a try-catch to handle malformed resources:
    try {
        $json = $encoder->encode($resource);
    } catch (\Neomerx\JsonApi\Exceptions\InvalidResourceException $e) {
        return response()->json(['error' => $e->getMessage()], 400);
    }
    
  • Pagination: Use neomerx/json-api's pagination helpers (e.g., Page) for consistent pagination formats.
  • Meta Data: Attach metadata via the Meta object:
    $resource->setMeta(['custom' => 'value']);
    

Gotchas and Tips

Pitfalls

  1. Strict JSON:API Compliance The encoder enforces the JSON:API spec rigorously. Non-compliant data (e.g., missing id or type) will throw exceptions. Validate resources before encoding:

    $resource->validate();
    
  2. Performance Overhead For large datasets, encoding collections can be resource-intensive. Optimize by:

    • Using lazy collections (->cursor()).
    • Caching encoded responses.
  3. Dependency Conflicts Ensure neomerx/json-api is updated to a compatible version (check packagist). Conflicts may arise with older Laravel versions.

Debugging Tips

  • Enable Debug Mode: Set JSON_API_DEBUG in .env to log encoder issues.
  • Inspect Resources: Use dd($resource) to verify data structure before encoding.
  • Check for Deprecated Methods: Monitor neomerx/json-api releases for breaking changes.

Extension Points

  1. Custom Encoders Extend \LaravelJsonApi\Encoder\NeomerxEncoder to modify behavior:

    class CustomNeomerxEncoder extends NeomerxEncoder
    {
        public function encode($resource)
        {
            // Custom logic
            return parent::encode($resource);
        }
    }
    
  2. Middleware for Validation Add middleware to validate JSON:API requests before encoding:

    use Neomerx\JsonApi\Exceptions\InvalidDocumentException;
    
    public function handle($request, Closure $next)
    {
        try {
            $document = \Neomerx\JsonApi\Document::fromArray($request->all());
            $document->validate();
        } catch (InvalidDocumentException $e) {
            return response()->json(['error' => $e->getMessage()], 422);
        }
        return $next($request);
    }
    
  3. Testing Mock the encoder in tests to isolate logic:

    $encoder = Mockery::mock(NeomerxEncoder::class);
    $encoder->shouldReceive('encode')->andReturn('{"data":{...}}');
    
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.
calmfox/watch-sylius
damienfern/grpc-symfony-bundle
atoolo/index-bundle
atoolo/genai-bundle
coprotoai/laravel-ticket
davidjln/llm-carbon-bundle
cryonighter/valid-request-bundle
coolms/taxonomy-bundle
coolms/field-bundle
articulate-orm/symfony
aaix/laravel-tall-architect
ephoto/akeneo-connector
emmanuelballery/eb-plantumlbundle
emielburgman/symfony-visitor-beacon
emielburgman/symfony-visit-storage
emielburgman/symfony-security-headers
emielburgman/symfony-log-viewer
emarref/xdebug-bundle
emarref/pubnub-bundle
elriseio/finance-money-bundle