在我的登录控制器中,有一个硬编码的URL字符串,用于设置用户登录后重定向到的位置。我正在尝试通过按名称获取路由来实现这种动态化:
protected $redirectTo = '/home';
更新至:
protected $redirectTo = route('home');
但是以上给出了以下错误:
FatalErrorException(E_UNKNOWN) 常量表达式包含无效的操作
是否可以通过名称获取路线的URL?
答案 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