代码之家  ›  专栏  ›  技术社区  ›  lky

Laravel 5.6-在控制器中按名称获取路由

  •  2
  • lky  · 技术社区  · 6 年前

    在我的登录控制器中,有一个硬编码的URL字符串,用于设置用户登录后重定向到的位置。我试图通过按名称获取路线来实现这一动态:

    protected $redirectTo = '/home';
    

    更新至:

    protected $redirectTo = route('home');
    

    是否可以通过其名称获取路由的URL?

    6 回复  |  直到 6 年前
        1
  •  3
  •   Brian Lee    6 年前

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

    获取要使用的url

    request()->url()
    

    那条路呢

    request()->path()
    

    当前路由方法

    request->route()->getActionMethod()
    

    redirectTo 您可以重写函数:

    protected function redirectTo() {
        return route('foo.bar');
    }
    
        2
  •  1
  •   Jonathon    6 年前

    问题是在类中声明属性时不允许使用函数调用。您应该使用控制器的构造函数来设置它:

    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');
        }
    }
    
        3
  •  0
  •   eamirgh WizardNx    6 年前

    必须定义一个名为 home 这样地: Route::get('/home', 'HomeController@index')->name('home'); Route::get('/home', ['as' => 'home', 'uses' => 'HomeController@index']);

        4
  •  0
  •   yetanothersourav    6 年前

    $route_url = \Request::route()->getURLByName("name of the route");
    
        5
  •  0
  •   FULL STACK DEV    6 年前
    protected $redirectTo = route('home');
    

    不能将函数分配给属性。这就是为什么你会犯这个错误。

    你可以在你的构造器里这样做

    public function __construct(){
    
      $this->redirectTo = route('home')
    
    }
    
        6
  •  0
  •   Mohammed Aktaa    6 年前

    这是我使用的方法,它将与你。只是将此函数放入LoginController以覆盖已验证的函数。

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