Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

generator not working #626

Open
ansaryanparviz opened this issue Nov 14, 2024 · 1 comment
Open

generator not working #626

ansaryanparviz opened this issue Nov 14, 2024 · 1 comment

Comments

@ansaryanparviz
Copy link

when I run php artisan l5-swagger:generate I got Regenerating docs default without any error. but my new annotations not showed up in the documentation page. also if I change any of previous annotations it doesnt change seems like its freeze and not generating anymore.
I tried: delete vendor and composer install again or composer update
enviroment: windowa xampp php v8.2
I have deleted the storage/api-docs folder with api-docs.json in it. when I run php artisan l5-swagger:generate it will show Regenerating docs default and storage/api-docs folder is created without any file in it.
and even when I put my previous api-docs.json back in the folder it will show : Failed to fetch https://example.local/docs/api-docs.json

l5-swagger.php
`<?php

return [
'default' => 'default',
'documentations' => [
'default' => [
'api' => [
'title' => 'Thames Dev API Document',
],

        'routes' => [
            /*
             * Route for accessing api documentation interface
             */
            'api' => 'api/documentation',
        ],
        'paths' => [
            /*
             * Edit to include full URL in ui for assets
             */
            'use_absolute_path' => env('L5_SWAGGER_USE_ABSOLUTE_PATH', true),

            /*
             * 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\Annotations'),
                base_path('Modules\*\app\Annotations'),
            ],
        ],
    ],
],
'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' => ['auth:sanctum'],
            '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 excluded from scanning
         * @deprecated Please use `scanOptions.exclude`
         * `scanOptions.exclude` overwrites this
         */
        'excludes' => [],
    ],

    'scanOptions' => [
        /**
         * Configuration for default processors. Allows to pass processors configuration to swagger-php.
         *
         * @link https://zircote.github.io/swagger-php/reference/processors.html
         */
        'default_processors_configuration' => [
        /** Example */
        /**
         * 'operationId.hash' => true,
         * 'pathFilter' => [
         * 'tags' => [
         * '/pets/',
         * '/store/',
         * ],
         * ],.
         */
        ],

        /**
         * analyser: defaults to \OpenApi\StaticAnalyser .
         *
         * @see \OpenApi\scan
         */
        'analyser' => null,

        /**
         * analysis: defaults to a new \OpenApi\Analysis .
         *
         * @see \OpenApi\scan
         */
        'analysis' => null,

        /**
         * Custom query path processors classes.
         *
         * @link https://github.com/zircote/swagger-php/tree/master/Examples/processors/schema-query-parameter
         * @see \OpenApi\scan
         */
        'processors' => [
            // new \App\SwaggerProcessors\SchemaQueryParameter(),
        ],

        /**
         * pattern: string       $pattern File pattern(s) to scan (default: *.php) .
         *
         * @see \OpenApi\scan
         */
        'pattern' => null,

        /*
         * Absolute path to directories that should be excluded from scanning
         * @note This option overwrites `paths.excludes`
         * @see \OpenApi\scan
         */
        'exclude' => [],

        /*
         * Allows to generate specs either for OpenAPI 3.0.0 or OpenAPI 3.1.0.
         * By default the spec will be in version 3.0.0
         */
        'open_api_spec_version' => env('L5_SWAGGER_OPEN_API_SPEC_VERSION', \L5Swagger\Generator::OPEN_API_DEFAULT_SPEC_VERSION),
    ],

    /*
     * API security definitions. Will be generated into documentation file.
    */
    'securityDefinitions' => [
        'securitySchemes' => [
            /*
             * Examples of Security schemes
             */
            /*
            'api_key_security_example' => [ // Unique name of security
                'type' => 'apiKey', // The type of the security scheme. Valid values are "basic", "apiKey" or "oauth2".
                'description' => 'A short description for security scheme',
                'name' => 'api_key', // 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".
            ],
            'oauth2_security_example' => [ // Unique name of security
                'type' => 'oauth2', // The type of the security scheme. Valid values are "basic", "apiKey" or "oauth2".
                'description' => 'A short description for oauth2 security scheme.',
                'flow' => 'implicit', // The flow used by the OAuth2 security scheme. Valid values are "implicit", "password", "application" or "accessCode".
                'authorizationUrl' => 'http://example.com/auth', // The authorization URL to be used for (implicit/accessCode)
                //'tokenUrl' => 'http://example.com/auth' // The authorization URL to be used for (password/application/accessCode)
                'scopes' => [
                    'read:projects' => 'read your projects',
                    'write:projects' => 'modify projects in your account',
                ]
            ],
            */

            /* Open API 3.0 support
            'passport' => [ // Unique name of security
                'type' => 'oauth2', // The type of the security scheme. Valid values are "basic", "apiKey" or "oauth2".
                'description' => 'Laravel passport oauth2 security.',
                'in' => 'header',
                'scheme' => 'https',
                'flows' => [
                    "password" => [
                        "authorizationUrl" => config('app.url') . '/oauth/authorize',
                        "tokenUrl" => config('app.url') . '/oauth/token',
                        "refreshUrl" => config('app.url') . '/token/refresh',
                        "scopes" => []
                    ],
                ],
            ],
            'sanctum' => [ // Unique name of security
                'type' => 'apiKey', // Valid values are "basic", "apiKey" or "oauth2".
                'description' => 'Enter token in format (Bearer <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
             */
            [
                /*
                'oauth2_security_example' => [
                    'read',
                    'write'
                ],

                'passport' => []
                */
            ],
        ],
    ],

    /*
     * 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', true),

    /*
     * 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,

    /*
     * Swagger UI configuration parameters
     */
    'ui' => [
        'display' => [
            'dark_mode' => env('L5_SWAGGER_UI_DARK_MODE', false),
            /*
             * Controls the default expansion setting for the operations and tags. It can be :
             * 'list' (expands only the tags),
             * 'full' (expands the tags and operations),
             * 'none' (expands nothing).
             */
            'doc_expansion' => env('L5_SWAGGER_UI_DOC_EXPANSION', 'none'),

            /**
             * If set, enables filtering. The top bar will show an edit box that
             * you can use to filter the tagged operations that are shown. Can be
             * Boolean to enable or disable, or a string, in which case filtering
             * will be enabled using that string as the filter expression. Filtering
             * is case-sensitive matching the filter expression anywhere inside
             * the tag.
             */
            'filter' => env('L5_SWAGGER_UI_FILTERS', true), // true | false
        ],

        'authorization' => [
            /*
             * If set to true, it persists authorization data, and it would not be lost on browser close/refresh
             */
            'persist_authorization' => env('L5_SWAGGER_UI_PERSIST_AUTHORIZATION', false),

            'oauth2' => [
                /*
                 * If set to true, adds PKCE to AuthorizationCodeGrant flow
                 */
                'use_pkce_with_authorization_code_grant' => false,
            ],
        ],
    ],
    /*
     * Constants which can be used in annotations
     */
    'constants' => [
        'L5_SWAGGER_CONST_HOST' => env('L5_SWAGGER_CONST_HOST', 'http://my-default-host.com'),
    ],
],

];
`

composer.json
{ "name": "laravel/laravel", "type": "project", "description": "The skeleton application for the Laravel framework.", "keywords": ["laravel", "framework"], "license": "MIT", "require": { "php": "^8.2", "jenssegers/agent": "^2.6", "laravel/framework": "^11.9", "laravel/sanctum": "^4.0", "laravel/tinker": "^2.9", "nwidart/laravel-modules": "^11.1", "opcodesio/log-viewer": "^3.11" }, "require-dev": { "darkaonline/l5-swagger": "^8.6", "fakerphp/faker": "^1.23", "laravel/pint": "^1.13", "laravel/sail": "^1.32", "mockery/mockery": "^1.6", "nunomaduro/collision": "^8.0", "phpunit/phpunit": "^11.0.1" }, "autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" } }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } }, "scripts": { "post-autoload-dump": [ "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", "@php artisan package:discover --ansi" ], "post-update-cmd": [ "@php artisan vendor:publish --tag=laravel-assets --ansi --force" ], "post-root-package-install": [ "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" ], "post-create-project-cmd": [ "@php artisan key:generate --ansi", "@php -r \"file_exists('database/database.sqlite') || touch('database/database.sqlite');\"", "@php artisan migrate --graceful --ansi" ] }, "extra": { "laravel": { "dont-discover": [] }, "merge-plugin": { "include": [ "Modules/*/composer.json" ] } }, "config": { "optimize-autoloader": true, "preferred-install": "dist", "sort-packages": true, "allow-plugins": { "pestphp/pest-plugin": true, "php-http/discovery": true, "wikimedia/composer-merge-plugin": true } }, "minimum-stability": "stable", "prefer-stable": true }

@mehmetkalayci
Copy link

Hi.
'docs' => ['auth:sanctum'], this line protects your route/docs/api-docs.json document. I can't figure out the exact reason without additional data however if you see an unauthorized error like bellow, just check your config.

Failed to load API definition.
Fetch error
Unauthorized http://127.0.0.1:8000/docs/api-docs.json

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants