Обновление Lumen с 5.3 до 5.4 нарушает маршрутизацию - требуется дополнительный префикс

Я следую руководству по обновлению, чтобы установить приложение Lumen на последнюю версию. Шаг до 5.4 нарушает маршрутизацию следующим образом.

Есть маршрут на /oauth/test,

Это теперь приводит к 404 (было хорошо на 5.3): http://testcase.local/oauth/test

Это работает, если двойное вложение маршрута, следующим образом:

http://testcase.local/oauth/oauth/test

Это немного сложнее в том смысле, что внешний интерфейс (одностраничный JS) приложения обслуживается за Apache, а маршруты, основанные на backend, являются символическими ссылками. Однако apache настроен соответствующим образом (FollowSymLinks), и конфигурация работала нормально в 5.3.,

Маршруты перечислены правильно в php artisan route:list

Что изменилось в 5.4, чтобы это сломать и как я могу это исправить?

Редактировать: причина в том, что этот коммит Люмен.

Таким образом, что-то вроде того, как symfony / http-foundation обрабатывает пути, основанные на символических ссылках, разрывается для этого варианта использования.

1 ответ

Решение

Обходной путь должен был изменить логику в следующем методе:

class Application extends \Laravel\Lumen\Application
{
    /**
     * This override fixes our routing problem
     * https://stackru.com/questions/49048199/upgrading-lumen-from-5-3-to-5-4-breaks-routing-requires-additional-prefix
     *
     * Parse the incoming request and return the method and path info.
     *
     * @param  \Symfony\Component\HttpFoundation\Request|null  $request
     * @return array
     */
    protected function parseIncomingRequest($request)
    {
        if (! $request) {
            $request = Request::capture();
        }

        $this->instance(Request::class, $this->prepareRequest($request));

        // need the base url as well as the pathinfo when coming from symlinks
        return [$request->getMethod(), '/'.trim($request->getBaseUrl() . $request->getPathInfo(), '/')];
    }
}
Другие вопросы по тегам