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)