2016-02-24 5 views
2

У меня есть этот код на моем routes.php файле, который делает перенаправление. Хотя проблема в том, что всякий раз, когда я запускал команду php artisan route:cache, это дает мне ошибку Unable to prepare route [article/{params}] for serialization. Uses Closure.Маршрут маршрута Laravel без закрытия для кеша маршрута

Я знаю, что это связано с маршрутами, которые не позволяют кэшировать его, если у него есть закрытие. Но как я могу сделать обходной путь для этой перенаправления?

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

Я считаю, что вы должны перенести свое возвращение на контроллер, и это обойдет эту проблему. –

+0

Вы выполняете команду с помощью или вне vm, попробуйте в vm –

+0

@simonDavies. Я запускаю команду вне vm. Я не использую VSm для этого. Просто запустите xampp на моем локальном компьютере. – basagabi

ответ

1

Маршрутное кэширование не работает с маршрутами на основе Closure. Чтобы использовать кеширование маршрута, вы должны преобразовать любые маршруты Closure для использования классов контроллеров.

Route::get('article/{params}', '[email protected]'); 

в контроллере вы можете иметь свою функцию перенаправления, как показано ниже:

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

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

Возможно, кто-нибудь знает, как это сделать, когда он передаст аргументы контроллеру? 'Route :: get ('articles/{params}', function ($ params) { return Redirect :: to ('articles /'. $ Params. '/ Edit', 301); });' ' articles/'должен быть аргументом, который может быть передан контроллеру, так что я могу просто иметь один (1) контроллер, который перенаправляет. Это связано с тем, что у меня есть несколько таких строк, которые выполняют одну и ту же функциональность, и я не хочу создавать определенные контроллеры для каждого перенаправления. Это должен быть динамический контроллер, который может принимать параметры. – basagabi

1

С Laravel 5.5 вы можете использовать:

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

Смотрите documentation под переадресацией Маршруты.