Bru*_*uno 13 controller get laravel laravel-5.2
我正在尝试实现一个登录系统,只有在url中有get参数时才会重定向用户,否则它将重定向到配置文件页面.
所以,如果uri是这样的(没有get参数)
/login
Run Code Online (Sandbox Code Playgroud)
如果成功,用户将重定向到个人资料页面.
但是,如果uri具有get参数,例如
/login?r=articles
Run Code Online (Sandbox Code Playgroud)
用户将被重定向到文章页面,而不是默认路由到配置文件页面.
问题是,在控制器中,如果可能,如何执行此操作,或者如何检查get参数?
routes.php文件
// Signin
Route::post('/account/signin', [
'uses' => 'UserController@postSignIn',
'as' => 'user.signin',
]);
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
谢谢.
更新
谢谢大家的回复,事实是我仍然了解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>
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
像这样,它有效.
不知道在Laravel 5中这是否是一种可行且安全的方式,但它确实有效.
use*_*178 29
如果你有一个URI login?r=articles,你可以articles像这样检索:
request()->r
Run Code Online (Sandbox Code Playgroud)
您还可以使用request()->has('r')它来确定它是否存在于URI中.
并request()->filled('r')确定它是否存在于URI中,并且其值不为空.
Lar*_*ser 10
// 只查询
$query_array = $request->query();
Run Code Online (Sandbox Code Playgroud)
或者
$query = $request->query('r');
Run Code Online (Sandbox Code Playgroud)
// 没有查询字符串...
$url = $request->url();
Run Code Online (Sandbox Code Playgroud)
// 使用查询字符串...
$url = $request->fullUrl();
Run Code Online (Sandbox Code Playgroud)