2015-12-20 2 views
0

Как сообщить Laravel о маршруте /users/information.php в /users/information?Как обрабатывать статическую маршрутизацию перехвата файлов в Laravel?

Таким образом, у меня есть относительная ссылка на существующий файл PHP. Например:

/user/information.php

Я медленно преобразовывать свою систему к Laravel, но я должен поддерживать существующие устаревшие ссылки. Я намереваюсь на позволять мой 404 Обработчик заботиться о нем следующим образом:

  1. Пользователь переходит к файлу, который используется для существовать (/user/information.php).
  2. Система обнаруживает, что файл больше не существует.
  3. 404 обработчик перехватывает несуществующий файл и пытается добраться до маршрут в новое место (/user/information).
  4. Если маршрут найден, то маршруты в противном случае бросает 404.

EDIT:

Я надеюсь, есть способ, чтобы написать что-то не делать редирект, как:

$router->get('/user/information.php', UserController::class . '@information'); 

ответ

0

Вот метод, который закончился тем, что решение, которое я использовал:

Route::get('user/information{extension?}', ['uses' => UserController::class . '@information']) 
    ->where(['extension' => '\..+']); 
0
Route::get('user/information.php', function() { 
    return redirect('user/information'); 
}); 

Я думаю, вы должны иметь возможность настроить перенаправление в файле маршрутов. Это работает?

+0

Вы можете переслать POST? –

+1

Зачем вам нужно перенаправлять POST, вы не должны проходить такую ​​ситуацию. POST приходит из вашего приложения, они не должны быть связаны ссылками по закладкам? –

+0

Вы правы. Тем не менее, применительно к характеру устаревшего кода могут быть другие местоположения, которые имеют форму, которая помещается в одну и ту же ссылку. Поэтому я хочу избежать возможности этого взлома. Я знаю, что это сумасшествие! Но с другой стороны, наш устаревший код очищается. ;) –

1

Я не уверен, но я думаю, вы можете поймать NotFoundHttpException. Поместите этот код в render метод в файле app/Exceptions/Handler.php

if ($e instanceof NotFoundHttpException) { 

    $path = \Request::getPathInfo(); 

    if (\File::exists($path)) { 

     // If "/user/information.php" was found, show it. 

    } else { 

     // Remove the ".php" suffix 
     $path = str_replace('.php', '', $path); 

     $routeCollection = \Route::getRoutes(); 
     $routes = $routeCollection->getRoutes(); 

     // Find the match route 
     foreach($routes as $route) 
     { 
      // Detect if "/user/information" route exists 
      if ($route->getUri() == $path) 
      { 
       // Redirect to match route 
       return redirect()->to($path); 
      } 
     } 
    } 
} 
+0

Так что я должен был быть более ясным. Есть ли способ сделать это без перенаправления? Я использовал «перехват», я должен был более четко заявить об этом. –

0

я обнаружил, как я мог перехватить маршрут, не делая редирект.

// Handle a legacy route from a .php file 
if (preg_match('/\.php/', Request::getRequestUri())) { 
    $legacyPath = ltrim(str_replace('.php', '', Request::getRequestUri()), '/'); 
    $routeCollection = Route::getRoutes(); 
    $actionMethod = Request::getMethod(); 
    foreach ($routeCollection as $value) { 
     // if the path exists for the given method, call it! 
     if ($value->getPath() == $legacyPath && in_array($actionMethod, $value->getMethods())) { 
      $method = strtolower($actionMethod); 
      // the empty override method that allows the method to be called without redirecting 
      Route::$method('', $value->getAction()['controller']); 
     } 
    } 
} 
+0

Почему бы не перенаправить? Планируете ли вы постоянно поддерживать оба набора URL-адресов? –

+0

Я не планирую постоянно, но в то же время перенаправление является неопределенным. Кроме того, я не хочу обрабатывать все нюансы с параметрами POST, GET, PUT и DELETE, которые могут передаваться с запросом. –

Смежные вопросы