Laravel 5.6 - получить маршрут по имени в контроллере

В моем контроллере входа в систему есть жестко запрограммированная строка URL-адреса, которая устанавливает, куда перенаправить после входа пользователя в систему. Я пытаюсь сделать это динамическим, получая маршрут по имени:

protected $redirectTo = '/home';

Обновлено:

protected $redirectTo = route('home');

Однако приведенное выше дает следующую ошибку:

FatalErrorException (E_UNKNOWN) Constant expression contains invalid operations

Можно ли получить URL-адрес маршрута по его имени?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
1
8 943
6

Ответы 6

Ты можешь использовать

request()->route()->getName()

Чтобы получить URL-адрес, который вы должны использовать

request()->url()

И путь

request()->path()

Текущий метод маршрута

request->route()->getActionMethod()

В случае redirectTo вы можете переопределить функцию:

protected function redirectTo() {
    return route('foo.bar');
}

Вы должны определить маршрут с именем home как это: Route::get('/home', 'HomeController@index')->name('home'); или Route::get('/home', ['as' => 'home', 'uses' => 'HomeController@index']);

Другой способ получить url маршрута

$route_url = \Request::route()->getURLByName("name of the route");

Ваша проблема в том, что вам не разрешено использовать вызов функции при объявлении свойства в вашем классе. Вы должны использовать конструктор вашего контроллера, чтобы установить его:

class LoginController extends Controller
{
    protected $redirectTo = '/home';

    public function __construct()
    {
        $this->middleware('guest')->except('logout');
        $this->redirectTo = route('home');
    }
}

В качестве альтернативы вы можете определить метод redirectTo, который возвращает местоположение, в которое вы хотите, чтобы пользователь был перенаправлен после успешного входа в систему. Затем вы можете полностью удалить свойство $redirectTo:

class LoginController extends Controller
{
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    public function redirectTo()
    {
        return route('home');
    }
}
protected $redirectTo = route('home');

Вы не можете назначить функцию свойству. Вот почему вы получаете эту ошибку.

вы можете сделать это в своем конструкторе, например

public function __construct(){

  $this->redirectTo = route('home')

}

Это способ, который я использую, и он будет работать с вами. Просто поместите эту функцию в свой LoginController, чтобы переопределить функцию аутентификации.

 protected function authenticated(Request $request, $user)
    {
            return redirect()->route('your_route_name');
    }

Другие вопросы по теме