Я строю немного люмен приложение с простым API & Аутентификация.
Я хочу перенаправить пользователя на предполагаемый URL-адрес, и если он посещает /auth/login
сам хочу, чтобы он перенаправил на /foo
,
в Laravel Docs есть эта функция: return redirect()->intended('/foo');
Когда я использую это в моем маршруте, я получаю ошибку в журнале сервера, которая говорит это:
[30-Apr-2015 08:39:47 UTC] PHP Fatal error: Call to undefined method Laravel\Lumen\Http\Redirector::intended() in ~/Sites/lumen-test/app/Http/routes.php on line 16
Я думаю это потому что люмен это уменьшенная версия Laravel и, возможно, эта функция не реализована (пока).
Я решил эту проблему, немного подкорректировав Middleware, а также сохранив Request :: path () в сеансе.
Вот как выглядит мое Middleware:
class AuthMiddleware {
public function handle($request, Closure $next) {
if(Auth::check()){
return $next($request);
} else {
session(['path' => Request::path()]);
return redirect('/auth/login');
}
}
}
И в моем rout.php у меня есть этот маршрут (который я передам на контроллер как можно скорее):
$app->post('/auth/login', function(Request $request) {
if (Auth::attempt($request->only('username', 'password'))){
if($path = session('path')){
return redirect($path);
} else {
return redirect('/messages');
}
} else {
return redirect()->back()->with("error", "Login failed!");
}
});
Благодаря ИДИР ФЕТТ за предложение метода Request :: path ().
Надеюсь, это поможет нескольким людям, которые являются новыми для
люмен, кстати, это отличная основа. 🙂
Действительно, глядя на исходный код Lumen, он не реализован:
https://github.com/laravel/lumen-framework/blob/5.0/src/Http/Redirector.php
Ваши варианты:
Я думаю, что вы должны указать имя маршрута в предполагаемом методе, а не URI:
return redirect()->intended('foo');
при условии, что вы уже назвали маршрут, я думаю, что это все еще работает:
return Redirect::intended('/foo');
ОБНОВИТЬ:
попробуй это:
получить запрошенный URI:
$uri = Request::path(); // Implemented in Lumen
затем перенаправить на запрошенный URI:
return redirect($uri);
это может сработать !!