Laravel路由重定向没有关闭路由缓存

时间:2016-02-24 21:32:51

标签: php laravel routes laravel-routing laravel-5.2

我在我的routes.php文件上有这个代码进行重定向。虽然问题是每当我运行php artisan route:cache命令时,它都会给我一个错误Unable to prepare route [article/{params}] for serialization. Uses Closure.

我知道这与路由有关,如果它有一个闭包,则不允许它被缓存。但是,我如何为此重定向制定解决方法?

Route::get('article/{params}', function($params) {
    return Redirect::to($params, 301);
});

3 个答案:

答案 0 :(得分:2)

路由缓存不适用于基于Closure的路由。要使用路由缓存,必须将任何Closure路由转换为使用控制器类。

Route::get('article/{params}', 'HelperController@redirect');

在您的控制器中,您可以拥有如下所示的重定向功能:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class HelperController extends Controller
{
  public function redirect($params)
  {
    return Redirect::to($params, 301);
  }
}

答案 1 :(得分:2)

Laravel 5.5以来您可以使用:

Route::redirect('/here', '/there', 301);

请参阅重定向路由下的documentation

答案 2 :(得分:0)

看来,缓存路由现在也适用于Closures。

文档中的警告也来自Laravel 7:
https://laravel.com/docs/7.x/controllers#route-caching
到Laravel 8:
https://laravel.com/docs/8.x/controllers#route-caching

也在项目中对其进行了测试,并且没有抱怨。