HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: /var/www/admin.javaapp.co.uk/vendor/yajra/laravel-datatables-fractal/src/FractalServiceProvider.php
<?php

namespace Yajra\DataTables;

use Illuminate\Support\ServiceProvider;
use League\Fractal\Manager;
use League\Fractal\Serializer\DataArraySerializer;
use Yajra\DataTables\Commands\TransformerMakeCommand;
use Yajra\DataTables\Transformers\FractalTransformer;

class FractalServiceProvider extends ServiceProvider
{
    /**
     * Indicates if loading of the provider is deferred.
     *
     * @var bool
     */
    protected bool $defer = false;

    /**
     * Bootstrap the application events.
     *
     * @return void
     */
    public function boot(): void
    {
        $this->mergeConfigFrom(__DIR__.'/../config/datatables-fractal.php', 'datatables-fractal');
        $this->publishAssets();

        $this->registerMacro();
    }

    /**
     * Publish datatables assets.
     *
     * @return void
     */
    protected function publishAssets(): void
    {
        $this->publishes(
            [
                __DIR__.'/../config/datatables-fractal.php' => config_path('datatables-fractal.php'),
            ], 'datatables-fractal'
        );
    }

    /**
     * Register DataTables macro methods.
     *
     * @return void
     */
    protected function registerMacro(): void
    {
        DataTableAbstract::macro('setTransformer', function ($transformer) {
            $this->transformer = [$transformer];

            return $this;
        });

        DataTableAbstract::macro('addTransformer', function ($transformer) {
            $this->transformer[] = $transformer;

            return $this;
        });

        DataTableAbstract::macro('setSerializer', function ($serializer) {
            $this->serializer = $serializer;

            return $this;
        });
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register(): void
    {
        $this->app->singleton('datatables.fractal', function () {
            $fractal = new Manager;
            $config = $this->app['config'];
            $request = $this->app['request'];

            $includesKey = $config->get('datatables-fractal.includes', 'include');
            if ($request->get($includesKey)) {
                $fractal->parseIncludes($request->get($includesKey));
            }

            $serializer = $config->get('datatables-fractal.serializer', DataArraySerializer::class);
            $fractal->setSerializer(new $serializer);

            return $fractal;
        });

        $this->app->singleton('datatables.transformer', function () {
            return new FractalTransformer($this->app->make('datatables.fractal'));
        });

        $this->commands([
            TransformerMakeCommand::class,
        ]);
    }

    /**
     * Get the services provided by the provider.
     *
     * @return array
     */
    public function provides(): array
    {
        return [
            'datatables.fractal',
            'datatables.transformer',
        ];
    }
}