<img height="1" width="1" style="display:none;" alt="" src="https://ct.pinterest.com/v3/?event=init&amp;tid=2612994575055&amp;pd[em]=<hashed_email_address>&amp;noscript=1">
Skip to content
    AdminOct 2, 2023 6:50:41 PM2 min read

    Create Swagger Configuration in Laravel

    In the previous article, we discussed how to Create Laravel Swagger API documentation. Here we will Create Swagger Configuration in Laravel.

     

    Step 1: Update the Configuration File

    Open the 'config/l5-swagger.php' file and add the following configurations. Feel free to adjust the values according to your needs.

    <?php
    
    return [
        'default' => 'default',
        'documentations' => [
            'default' => [
                'api' => [
                    'title' => 'Laravel API UI',
                    \App\Http\Middleware\EncryptCookies::class,
                    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
                    \Illuminate\Session\Middleware\StartSession::class,
                    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
                    \App\Http\Middleware\VerifyCsrfToken::class,
                    \Illuminate\Routing\Middleware\SubstituteBindings::class,
                    \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
                    'auth',
                ],
    
                'routes' => [
                    /*
                     * Route for accessing api documentation interface
                    */
                    'api' => 'api/documentation',
                ],
                'paths' => [
                    /*
                     * File name of the generated json documentation file
                    */
                    'docs_json' => 'api-docs.json',
    
                    /*
                     * File name of the generated YAML documentation file
                    */
                    'docs_yaml' => 'api-docs.yaml',
    
                    /*
                    * Set this to `json` or `yaml` to determine which documentation file to use in UI
                    */
                    'format_to_use_for_docs' => env('L5_FORMAT_TO_USE_FOR_DOCS', 'json'),
    
                    /*
                     * Absolute paths to directory containing the swagger annotations are stored.
                    */
                    'annotations' => [
                        base_path('app'),
                    ],
    
                ],
            ],
        ],
        'defaults' => [
            'routes' => [
                /*
                 * Route for accessing parsed swagger annotations.
                */
                'docs' => 'docs',
    
                /*
                 * Route for Oauth2 authentication callback.
                */
                'oauth2_callback' => 'api/oauth2-callback',
    
                /*
                 * Middleware allows to prevent unexpected access to API documentation
                */
                'middleware' => [
                    'api' => [],
                    'asset' => [],
                    'docs' => [],
                    'oauth2_callback' => [],
                ],
    
                /*
                 * Route Group options
                */
                'group_options' => [],
            ],
    
            'paths' => [
                /*
                 * Absolute path to location where parsed annotations will be stored
                */
                'docs' => storage_path('api-docs'),
    
                /*
                 * Absolute path to directory where to export views
                */
                'views' => base_path('resources/views/vendor/l5-swagger'),
    
                /*
                 * Edit to set the api's base path
                */
                'base' => env('L5_SWAGGER_BASE_PATH', null),
    
                /*
                 * Edit to set path where swagger ui assets should be stored
                */
                'swagger_ui_assets_path' => env('L5_SWAGGER_UI_ASSETS_PATH', 'vendor/swagger-api/swagger-ui/dist/'),
    
                /*
                 * Absolute path to directories that should be exclude from scanning
                */
                'excludes' => [],
            ],
    
            /*
             * API security definitions. Will be generated into documentation file.
            */
            'securityDefinitions' => [
                'securitySchemes' => [
                    /*
                     * Examples of Security schemes
                    */
                    'Authentication_Token' => [ // Unique name of security
                        'type' => 'apiKey', // The type of the security scheme. Valid values are "basic", "apiKey" or "oauth2".
                        'description' => 'An authorization header. Example: Token',
                        'name' => 'Authorization', // The name of the header or query parameter to be used.
                        'in' => 'header', // The location of the API key. Valid values are "query" or "header".
                    ],
                ],
                'security' => [
                    /*
                     * Examples of Securities
                    */
                    [
    
                       
                    ],
                ],
            ],
    
            /*
             * Set this to `true` in development mode so that docs would be regenerated on each request
             * Set this to `false` to disable swagger generation on production
            */
            'generate_always' => env('L5_SWAGGER_GENERATE_ALWAYS', false),
    
            /*
             * Set this to `true` to generate a copy of documentation in yaml format
            */
            'generate_yaml_copy' => env('L5_SWAGGER_GENERATE_YAML_COPY', false),
    
            /*
             * Edit to trust the proxy's ip address - needed for AWS Load Balancer
             * string[]
            */
            'proxy' => false,
    
            /*
             * Configs plugin allows to fetch external configs instead of passing them to SwaggerUIBundle.
             * See more at: https://github.com/swagger-api/swagger-ui#configs-plugin
            */
            'additional_config_url' => null,
    
            /*
             * Apply a sort to the operation list of each API. It can be 'alpha' (sort by paths alphanumerically),
             * 'method' (sort by HTTP method).
             * Default is the order returned by the server unchanged.
            */
            'operations_sort' => env('L5_SWAGGER_OPERATIONS_SORT', null),
    
            /*
             * Pass the validatorUrl parameter to SwaggerUi init on the JS side.
             * A null value here disables validation.
            */
            'validator_url' => null,
    
            /*
             * Uncomment to add constants which can be used in annotations
             */
            'constants' => [
                'L5_SWAGGER_CONST_LOCALHOST' => env('L5_SWAGGER_CONST_LOCALHOST', 'http://my-default-host.com'),
                'L5_SWAGGER_CONST_TESTINGHOST' => env('L5_SWAGGER_CONST_TESTINGHOST', 'http://my-default-host.com'),
            ],
        ],
    ];

    Now, add the below annotations in app/Http/Controller/Controller.php

    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
    use Illuminate\Foundation\Bus\DispatchesJobs;
    use Illuminate\Foundation\Validation\ValidatesRequests;
    use Illuminate\Routing\Controller as BaseController;
    
    class Controller extends BaseController
    {
        use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
    
        /**
         * @OA\Info(
         *      version="1.0.0",
         *      title="Laravel API",
         *      description="",
         *      @OA\Contact(
         *          email="admin@example.com"
         *      ),
         *      @OA\License(
         *          name="Apache 2.0",
         *          url="http://www.apache.org/licenses/LICENSE-2.0.html"
         *      )
         * )
         *
         * @OA\Server(
         *      url=L5_SWAGGER_CONST_LOCALHOST,
         *      description="Local server"
         * )
         * 
         * @OA\Server(
         *      url=L5_SWAGGER_CONST_TESTINGHOST,
         *      description="Testing server"
         * )
    
         *
         * @OA\Tag(
         *     name="User",
         *     description="User API"
         * )
         * 
         * @OAS\SecurityScheme(
         *      securityScheme="Authentication_Bearer_Token",
         *      type="http",
         *      scheme="bearer"
         * )
         * 
         */
    }

    Now, run php artisan l5-swagger:generate and check api at https://mywebsite.com/api/documentation.

    Read laravel swagger documentation here.

    COMMENTS

    RELATED ARTICLES