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

时间:2018-07-17 09:39:44

标签: laravel authentication routes

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

protected $redirectTo = '/home';

更新至:

protected $redirectTo = route('home');

但是以上给出了以下错误:

  

FatalErrorException(E_UNKNOWN)   常量表达式包含无效的操作

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

6 个答案:

答案 0 :(得分:3)

您可以使用

class Order(models.Model):
    billing_profile = models.ForeignKey(BillingProfile, null=True, blank=True)
    order_id        = models.CharField(max_length=120, blank=True)
    shipping_address= models.ForeignKey(Address, related_name="shipping_address",
                                        null=True, blank=True)
    cart            = models.ForeignKey(Cart)
    total           = models.DecimalField(default=0.00, decimal_places=2,
                        max_digits=100)
    active          = models.BooleanField(default=True)

要获取您将使用的网址

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

和路径

request()->url()

当前路线方法

request()->path()

对于request->route()->getActionMethod() ,您可以覆盖该函数:

redirectTo

答案 1 :(得分:0)

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

答案 2 :(得分:0)

获取路线网址的另一种方法

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

答案 3 :(得分:0)

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

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');
    }
}

答案 4 :(得分:0)

protected $redirectTo = route('home');

您不能将功能分配给属性。这就是为什么您会收到此错误。

您可以像在您的构造函数中那样

public function __construct(){

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

}

答案 5 :(得分:0)

这是我使用的方法,它将与您一起使用。只需将此函数放在LoginController中以覆盖经过身份验证的函数。

return