Laravel 5如何使用控制器登录方法从url获取get参数

时间:2016-06-29 18:06:57

标签: laravel controller get laravel-5.2

我尝试实施一个登录系统,只有在网址中有get参数时才会重定向用户,否则会重定向到个人资料页面。

所以,如果uri是这样的(没有get参数)

/login

如果成功,用户将重定向到个人资料页面。

但是如果uri有get参数,例如

/login?r=articles

用户将被重定向到文章页面,而不是默认路径到个人资料页面。

问题是,在控制器中,如果可能,如何执行此操作,或者如何检查get参数?

routes.php文件

// Signin
Route::post('/account/signin', [
    'uses' => 'UserController@postSignIn',
    'as' => 'user.signin',
]);

UserController.php

// Signin
public function postSignIn(Request $request)
{
    $this->validate($request, [
        'login-email' => 'required|email',
        'login-password' => 'required'
    ]);

    if ( Auth::attempt(['email' => $request['login-email'], 'password' => $request['login-password']]) )
    {

        // Tried this, isn't working... (maybe something's missing ??)
            $redirect = $request->input('r');
            if ($redirect) {
                return redirect()->route($redirect);
            }
        // -->

        return redirect()->route('user.account');
    }
    return redirect()->back();
}

signin.blade.php

<form role="form" action="{{ route('user.signin') }}" method="post" class="login-form" name="login">

    <div class="form-group {{ $errors->has('login-email') ? 'has-error' : '' }}">
        <label class="sr-only" for="email">Email</label>
        <input type="text" name="login-email" value="{{ Request::old('login-email') }}" placeholder="Email..." class="form-username form-control" id="form-username">
    </div>

    <div class="form-group {{ $errors->has('login-password') ? 'has-error' : '' }}">
        <label class="sr-only" for="password">Password</label>
        <input type="password" name="login-password" value="{{ Request::old('login-password') }}" placeholder="Password..." class="form-password form-control" id="form-password">
    </div>

    <div class="form-group">
        <input type="checkbox" name="remember" value="{{ Request::old('remember') }}" id="remember">
        Remember
    </div>

    <button type="submit" class="btn">Sign in!</button>

    <input type="hidden" name="_token" value="{{ Session::token() }}">
</form>

感谢。

更新

感谢大家的回复,事实是我仍然了解Laravel,这可能就是为什么我无法在你们共享的解决方案中实现它。

所以这说,我通过创建一个包含查询值的条件隐藏字段来实现它,这样一旦用户提交表单,它将与其余的$ response参数一起传递。

signin.blade.php

<form role="form" action="{{ route('user.signin') }}" method="post" class="login-form" name="login">

    <div class="form-group {{ $errors->has('login-email') ? 'has-error' : '' }}">
        <label class="sr-only" for="email">Email</label>
        <input type="text" name="login-email" value="{{ Request::old('login-email') }}" placeholder="Email..." class="form-username form-control" id="form-username">
    </div>

    <div class="form-group {{ $errors->has('login-password') ? 'has-error' : '' }}">
        <label class="sr-only" for="password">Password</label>
        <input type="password" name="login-password" value="{{ Request::old('login-password') }}" placeholder="Password..." class="form-password form-control" id="form-password">
    </div>

    <div class="form-group">
        <input type="checkbox" name="remember" value="{{ Request::old('remember') }}" id="remember">
        Remember
    </div>

    <button type="submit" class="btn">Sign in!</button>

    <input type="hidden" name="_token" value="{{ Session::token() }}">
    <!-- Verify condition -->
    @if(isset($_GET['referer']))
        <input type="hidden" name="referer" value="{{ $_GET['referer'] }}">
    @endif
</form>

UserController.php

// Signin
public function postSignIn(Request $request)
{
    $this->validate($request, [
        'login-email' => 'required|email',
        'login-password' => 'required'
    ]);

    if ( Auth::attempt(['email' => $request['login-email'], 'password' => $request['login-password']]) )
    {

        // Check for the new argument 'referer'
        if (isset($request->referer)) {
            return redirect()->route($request->referer);
        }
        // -->

        return redirect()->route('user.account');
    }
    return redirect()->back();
}

像这样,它有效。

不知道在Laravel 5中这是否是一种可行且安全的方法,但它正在发挥作用。

4 个答案:

答案 0 :(得分:18)

当您拥有login?r=articles等URI时,可以像这样检索articles

request()->r

您还可以使用request()->has('r')来确定它是否存在于URI中。

request()->filled('r')查明它是否存在于URI中,且其值不为空。

答案 1 :(得分:3)

如果你正在使用Laravel然后使用他们的帮助器,它只是开箱即用,即如果你的路线或网址有一个auth middlewere而用户没有登录然后它进入登录和postSign或内部尝试只是< / p>

Transcript show:'(',dx,'@',dy,')';cr.

<强> UserController中

 return redirect()->intended('home'); //home is the fallback if no intended url is provide

}

答案 2 :(得分:2)

//只查询

$query_array = $request->query();

$query = $request->query('r');

//没有查询字符串...

$url = $request->url();

//使用查询字符串...

$url = $request->fullUrl();

答案 3 :(得分:0)

首先使用

use Illuminate\Support\Facades\Input;

然后您可以从您的网址中获取任何数据

$name=Input::get('term', false); //term is the parameter name we get from URL