Необязательный параметр Laravel в API-запросе воспринимается неправильно - PullRequest
0 голосов
/ 10 января 2019

В моем api.php у меня есть эти маршруты.

Я могу запросить конечную точку: /api/v2/commodities/1 - этот запрос перенаправляется на APICommodityController@read - это нормально!

Проблема возникает, когда я получаю GET-запрос /v2/commodities/categories/. Я бы хотел, чтобы этот запрос был перенаправлен в группу маршрутов: «категории», но вместо этого Laravel воспринимает это как необязательный параметр в первой группе (~ ссылка «ЗДЕСЬ» в комментарии к коду).

Как мне это исправить?

Route::group( [ 'prefix' => 'v2' ], function() {

    /**
     * Commodity
     */
    Route::group( [ 'prefix' => 'commodities' ], function() {

        /**
         * C: CREATE
         */
        Route::post( '{id?}', 'API\v2\Commodity\APICommodityController@updateOrCreate' );

        /**
         * U: UPDATE
         */
        Route::put( '{id}', 'API\v2\Commodity\APICommodityController@updateOrCreate' );

        /**
         * R: READ (HERE)
         */
        Route::get( '{id?}', 'API\v2\Commodity\APICommodityController@read' );

        /**
         * D: DELETE
         */
        Route::delete( '{id}', 'API\v2\Commodity\APICommodityController@delete' );

        /**
         * Commodity categories
         */
        Route::group( [ 'prefix' => 'categories' ], function() {

            /**
             * C: CREATE
             */
            Route::post( '{id?}', 'API\v2\CommodityCategories\APICommodityCategoriesController@updateOrCreate' );

            /**
             * U: UPDATE
             */
            Route::put( '{id}', 'API\v2\CommodityCategories\APICommodityCategoriesController@updateOrCreate' );

            /**
             * R: READ
             */
            Route::get( '{id?}', 'API\v2\CommodityCategories\APICommodityCategoriesController@read' );

            /**
             * D: DELETE
             */
            Route::delete( '{id}', 'API\v2\CommodityCategories\APICommodityCategoriesController@delete' );

        } );

    } );

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Просто переместите свой раздел маршрута категорий товаров выше всех других определений маршрута. Это заставит laravel зарегистрировать этот статический маршрут и не будет перехвачен динамической маршрутизацией.

Примерно так:

Route::group( [ 'prefix' => 'v2' ], function() {

    /**
     * Commodity
     */
    Route::group( [ 'prefix' => 'commodities' ], function() {
        /**
         * Commodity categories
         */
        Route::group( [ 'prefix' => 'categories' ], function() {

            /**
             * C: CREATE
             */
            Route::post( '{id?}', 'API\v2\CommodityCategories\APICommodityCategoriesController@updateOrCreate' );

            /**
             * U: UPDATE
             */
            Route::put( '{id}', 'API\v2\CommodityCategories\APICommodityCategoriesController@updateOrCreate' );

            /**
             * R: READ
             */
            Route::get( '{id?}', 'API\v2\CommodityCategories\APICommodityCategoriesController@read' );

            /**
             * D: DELETE
             */
            Route::delete( '{id}', 'API\v2\CommodityCategories\APICommodityCategoriesController@delete' );

        } );

        /**
         * C: CREATE
         */
        Route::post( '{id?}', 'API\v2\Commodity\APICommodityController@updateOrCreate' );

        /**
         * U: UPDATE
         */
        Route::put( '{id}', 'API\v2\Commodity\APICommodityController@updateOrCreate' );

        /**
         * R: READ (HERE)
         */
        Route::get( '{id?}', 'API\v2\Commodity\APICommodityController@read' );

        /**
         * D: DELETE
         */
        Route::delete( '{id}', 'API\v2\Commodity\APICommodityController@delete' );
    } );
0 голосов
/ 10 января 2019

добавьте это условие в конце ваших параметров id:

->where('id', '[0-9]+')

так что это становится примерно так:

Route::get( '{id?}', 'API\v2\Commodity\APICommodityController@read' )->where('id', '[0-9]+');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...