Laravel得到了想要的网址

Ada*_*s.H 10 javascript php laravel

我使用常见的httpRequest登录,因此我可以Redirect::intended();在用户进入登录页面之前将其引导到网址.这一切都运作良好.

现在我已经将登录更改为ajax请求我现在只能在javascript中重定向url.所以我要把预定的网址传递到前端,然后做window.location=url

问题是我无法得到intended/origina我的网址.任何一种laravel专家可以帮助我吗?

tho*_*ulb 14

在您的控制器操作中使用:

$url = Redirect::intended( ... )->getTargetUrl();

(...后备网址在哪里)

然后在JSON响应中返回它,并使用window.location或其他来执行重定向.


The*_*pha 11

当您显示表单foe登录时,您可以获取目标url(session如果可用)并将其传递给视图,然后使用重定向window.location.

所以.怎么抢intended url

$intended_url = Session::get('url.intended', url('/'));
Session::forget('url.intended');
Run Code Online (Sandbox Code Playgroud)

这里,第一个参数是,intended url如果可用,session并且默认设置使用url('/')辅助方法设置为主页,因此$intended_url将始终包含a url,intent或defaulr.然后在加载视图时,$intended_url使用以下命令:

return View::make('login')->with('intended_url', $intended_url);
Run Code Online (Sandbox Code Playgroud)

然后从视图中使用它:

window.location = $intended_url;
Run Code Online (Sandbox Code Playgroud)

或者,您可以设置View Composer,这样无论何时login显示视图/表单intended url,该视图都将在该视图中可用,您可以使用以下方法执行此操作:

View::composer('login', function($view){
    $intended_url = Session::get('url.intended', url('/'));
    Session::forget('url.intended');
    return $view->with('intended_url', $intended_url);
});
Run Code Online (Sandbox Code Playgroud)

这里login是登录页面的视图名称,如果在您的情况下是其他内容,则将其更改为login视图的相应名称.您可以将此代码保存app/start在'global.php'文件中的文件夹中,或将其保存在单独的文件中,并global.php使用此文件(最后)包含此文件内容:

require 'view_composer.php';
Run Code Online (Sandbox Code Playgroud)

假设文件名将view_composer.php出现在app/start文件夹中.


小智 7

在 Laravel 5.7 中:

$url = redirect()->intended()->getTargetUrl();
Run Code Online (Sandbox Code Playgroud)