在 laravel 5.1 路由拦截之前更改 get url
change the get url before laravel 5.1 route intercepts it
在最终掌握 Laravel 的关键部分后,我准备好重构我所有的程序代码。
我有一个问题,一些其他程序使用以下 url 是这样的:
http://my.domain.com/somecode.php?something=a&somethingelse=b
据我所知,laravel 路线看起来像:
我应该如何在 laravel 中或 laravel 路由被调用之前拦截 url 的旧样式并转换它以便路由可以处理它?
只要您只使用 GET
执行此操作,您就可以使用中间件来解决您的问题。
创建中间件
php artisan make:middleware RedirectIfOldUrl
...或者随便你怎么称呼它。
将定义添加到您的 app/Http/Kernel.php
将 \App\Http\Middleware\RedirectIfOldUrl::class,
添加到 $middleware
数组(不是 $routeMiddleware
)数组。
这将导致在每次请求时调用中间件。
处理请求
public function handle($request, Closure $next)
{
if (str_contains($request->getRequestUri(), '.php?')) {
//Remove .php from the request url
$url = str_replace('.php', '', $request->url());
foreach ($request->input() as $key => $value) {
$url .= "/{$key}/{$value}";
}
return redirect($url);
}
return $next($request);
}
以上是一个非常基本的实现或者你在问题中提到的。您可能需要调整逻辑才能使其完全适合您的应用程序,但它应该为您指明正确的方向。
希望对您有所帮助!
我设法在 Laravel 6.2 中使用此中间件重写了路径,并将其添加到 app\Http\Kernel.php
:
<?php
namespace App\Http\Middleware;
use Closure;
class Localize
{
public function handle($request, Closure $next)
{
if(substr($_SERVER['REQUEST_URI'], 0, 4 ) === "/es/" || $_SERVER['REQUEST_URI'] === "/es") {
$request->server->set('REQUEST_URI', substr($_SERVER['REQUEST_URI'], 4));
app()->setLocale('es');
}
return $next($request);
}
}
如果您尝试使用:$request->server->get('REQUEST_URI')
set 命令将无法正常工作,我猜调用 get() 会导致某种缓存。
在最终掌握 Laravel 的关键部分后,我准备好重构我所有的程序代码。
我有一个问题,一些其他程序使用以下 url 是这样的:
http://my.domain.com/somecode.php?something=a&somethingelse=b
据我所知,laravel 路线看起来像:
我应该如何在 laravel 中或 laravel 路由被调用之前拦截 url 的旧样式并转换它以便路由可以处理它?
只要您只使用 GET
执行此操作,您就可以使用中间件来解决您的问题。
创建中间件
php artisan make:middleware RedirectIfOldUrl
...或者随便你怎么称呼它。
将定义添加到您的 app/Http/Kernel.php
将 \App\Http\Middleware\RedirectIfOldUrl::class,
添加到 $middleware
数组(不是 $routeMiddleware
)数组。
这将导致在每次请求时调用中间件。
处理请求
public function handle($request, Closure $next)
{
if (str_contains($request->getRequestUri(), '.php?')) {
//Remove .php from the request url
$url = str_replace('.php', '', $request->url());
foreach ($request->input() as $key => $value) {
$url .= "/{$key}/{$value}";
}
return redirect($url);
}
return $next($request);
}
以上是一个非常基本的实现或者你在问题中提到的。您可能需要调整逻辑才能使其完全适合您的应用程序,但它应该为您指明正确的方向。
希望对您有所帮助!
我设法在 Laravel 6.2 中使用此中间件重写了路径,并将其添加到 app\Http\Kernel.php
:
<?php
namespace App\Http\Middleware;
use Closure;
class Localize
{
public function handle($request, Closure $next)
{
if(substr($_SERVER['REQUEST_URI'], 0, 4 ) === "/es/" || $_SERVER['REQUEST_URI'] === "/es") {
$request->server->set('REQUEST_URI', substr($_SERVER['REQUEST_URI'], 4));
app()->setLocale('es');
}
return $next($request);
}
}
如果您尝试使用:$request->server->get('REQUEST_URI')
set 命令将无法正常工作,我猜调用 get() 会导致某种缓存。