Laravel редирект после авторизации

574
03 февраля 2017, 07:34

Доброго времени суток, друзья. Помогите разобраться, а то уже голову сломал... Задача - после авторизации на странице /login нужно сделать редирект на страницу пользователя с id в URL. Пример ниже.

Сейчас у меня прописано в LoginController.php такое:

protected $redirectTo = '/profile';

То есть редиректит на страницу /profile, однако нужно сделать вот так как-то:

protected $redirectTo = '/profile/{$id}';

То есть, чтобы в URL добавлялся id залогиненного пользователя.

В routers/web.php у меня прописано такое:

Route::get('profile/{id}', 'HomeController@index');

То есть при переходе на страницу /profile/user-id открывается страница с информацией о пользователе с указанным в URL id. Но в LoginController.php так не получается... когда прописываю protected $redirectTo = '/profile/{$id}';

то все работает, но только URL такого вида /profile/%7Bid%7D

Что не так делаю? Я так понимаю, что ID почему-то воспринимается как строка, а не цифра.

Answer 1

В документации написано, что если вам нужно использовать какую-то логику для редиректа, то свойство protected $redirectTo можно заменить на метод

protected function redirectTo()
{
    // Получить $id
    return '/profile/' . $id;
}
Answer 2

Давайте просто посмотрим на класс App\Http\Controllers\Auth\LoginController, этот класс использует особенность: AuthenticatesUsers,

Теперь давайте заглянем в эту особенность, она в свою очередь использует еще 2 особенности: RedirectsUsers, ThrottlesLogins

Из вашего вопроса, сразу понятно, что нам нужна первая, давайте посмотрим на нее:

namespace Illuminate\Foundation\Auth;
trait RedirectsUsers
{
    /**
     * Get the post register / login redirect path.
     *
     * @return string
     */
    public function redirectPath()
    {
        if (method_exists($this, 'redirectTo')) {
            return $this->redirectTo();
        }
        return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
    }
}

Единственный метод, который в ней реализован - redirectPath, который проверяет есть ли метод redirectTo(), если его нет, то будет попытка перейти по свойству redirectTo, если нет и его то идет в /home

остается создать метод в классе LoginController:

protected function redirectTo(){
   return url('/profile/',auth()->user()->id);
}
READ ALSO
Получить php файл как текст

Получить php файл как текст

Нужно получить php файл как текст, естественно не выполняя код в самом файле, то есть только прочитать его

447
PHP Нету текста в теге

PHP Нету текста в теге

на сайте есть текст в теге а в file get contents нет как сделать так что бы не было пусто в теге

367
Не получается парсить данные таблиц с ОПРЕДЕЛЕННЫХ сайтов [требует правки]

Не получается парсить данные таблиц с ОПРЕДЕЛЕННЫХ сайтов [требует правки]

Не получается спарсить никакую информацию из таблиц, только из шапки, с этих двух сайтовhttp://livvved

398