Laravel获得了预期的网址

时间:2014-02-01 14:45:26

标签: javascript php laravel

我使用常见的httpRequest登录,因此我可以使用Redirect::intended();将用户引导至网址,然后再将其引导至登录页面。这一切都运作良好。

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

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

4 个答案:

答案 0 :(得分:12)

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

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

(其中...是后备网址)

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

答案 1 :(得分:10)

当您显示表单时,如果可用,您可以从url抓取目标session并将其传递给视图,然后使用window.location重定向。

因此。如何抓住intended url

$intended_url = Session::get('url.intended', url('/'));
Session::forget('url.intended');

此处,intended url中的第一个参数为session,并且使用url('/')辅助方法将默认值设置为主页,因此$intended_url将始终包含{{0}} {1}},意图或违约。然后在加载视图时,使用以下代码传递url

$intended_url

然后从视图中使用它:

return View::make('login')->with('intended_url', $intended_url);

或者,您可以设置View Composer,因此每当显示window.location = $intended_url; 视图/表单时,该视图中都会显示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); }); 是登录页面的视图名称,如果您的情况属实,则将其更改为login视图的相应名称。您可以将此代码保存在'global.php'文件中的login文件夹中,或将其保存在单独的文件中,并使用此文件(最后)将此文件包含在app/start文件中:

global.php

假设文件名为require 'view_composer.php'; ,存在于view_composer.php文件夹中。

答案 2 :(得分:1)

在Laravel 5.7中:

$url = redirect()->intended()->getTargetUrl();

答案 3 :(得分:0)

我正在将以下方法与用于Laravel 5.7的自定义登录控制器和中间件一起使用,但是我希望该方法可在laravel 5的任何版本中使用

  • 内部中间件

    if (Auth::check()){
        return $next($request);
    }
    else{
      return redirect()->guest(route('login'));
    }
    
  • 如果您没有将目标网址传递给客户端,请使用以下内部控制器登录方法

    if (Auth::attempt(['email' => $email, 'password' => $password])) {
    return redirect()->intended('/default');
    }
    
  • 如果您需要将目标网址传递给客户端,则可以尝试以下

       if (Auth::attempt(['username' => $request->username, 'password' => $request->password])) {
           $intended_url= redirect()->intended('/default')->getTargetUrl();
           $response = array(
          'status' => 'success',
          'redirectUrl' => $intended_url,
          'message' => 'Login successful.you will be redirected to home..', );
          return response()->json($response);
        } else {
            $response = array(
          'status' => 'failed',
          'message' => 'username or password is incorrect', );
         return response()->json($response);
        }
    
  • 从客户端重定向到目标网址

           success: function (data) {               
                  if(data.redirectUrl){
                  window.location.href = data.redirectUrl;
                  }
           },