Обновление 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 обрабатывает пути, основанные на символических ссылках, разрывается для этого варианта использования.

0

Решение

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

class Application extends \Laravel\Lumen\Application
{
/**
* This override fixes our routing problem
* https://stackoverflow.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(), '/')];
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]