Я следую за руководство по обновлению чтобы получить приложение 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 обрабатывает пути, основанные на символических ссылках, разрывается для этого варианта использования.
Обходной путь должен был изменить логику в следующем методе:
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(), '/')];
}
}
Других решений пока нет …