我目前正在开发一个项目,其中登录/注册是通过模态框处理的(所以我点击登录按钮,一个漂亮的模态显示一个表格)。
我使用基础5的揭示模式来存放我的登录表单,但是当提交表单并且有一个验证错误时,模态关闭。发生这种情况的原因是因为我重定向回到登录表单所在的路径,并且在该路由中需要单击一个按钮来触发模式。
我想知道的是,有什么我可以设置,以便模式保持打开,如果有验证错误或异常(帐户未找到等)所以如果有验证错误,模态保持打开。
寻找任何类型的解决方案。我的代码如下所示。
登录功能
public function postLogin()
{
// Declare the rules for the form validation
$rules = array(
'email' => 'required|email',
'password' => 'required|between:3,32',
);
// Create a new validator instance from our validation rules
$validator = Validator::make(Input::all(), $rules);
// If validation fails, we'll exit the operation now.
if ($validator->fails())
{
// Ooops.. something went wrong
return Redirect::back()->withInput()->withErrors($validator);
}
try
{
// Try to log the user in
Sentry::authenticate(Input::only('email', 'password'), Input::get('remember-me', 0));
// Get the page we were before
$redirect = Session::get('loginRedirect', 'dashboard');
// Unset the page we were before from the session
Session::forget('loginRedirect');
// Redirect to the users page
return Redirect::to($redirect)->with('success', Lang::get('auth/message.signin.success'));
}
catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
{
$this->messageBag->add('email', Lang::get('auth/message.account_not_found'));
}
catch (Cartalyst\Sentry\Users\UserNotActivatedException $e)
{
$this->messageBag->add('email', Lang::get('auth/message.account_not_activated'));
}
catch (Cartalyst\Sentry\Throttling\UserSuspendedException $e)
{
$this->messageBag->add('email', Lang::get('auth/message.account_suspended'));
}
catch (Cartalyst\Sentry\Throttling\UserBannedException $e)
{
$this->messageBag->add('email', Lang::get('auth/message.account_banned'));
}
// Ooops.. something went wrong
return Redirect::back()->withInput()->withErrors($this->messageBag);
}
登录模式
<div id="myModalLogin" class="reveal-modal small" data-reveal>
<h2>Login</h2>
<form method="post" action="{{ route('login') }}">
{{-- CSRF Token --}}
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
{{-- Email --}}
<label for="email"> Email
<input type="text" name="email" id="email" value="{{ Input::old('email') }}" />
</label>
{{ $errors->first('email', '<label class="error">:message</label>') }}
{{-- Password --}}
<label for="password"> Email
<input type="password" name="password" id="password" value=""/>
</label>
{{ $errors->first('password', '<label class="error">:message</label>') }}
{{-- Remember me --}}
<input name="remember-me" value="1" id="remember-me" type="checkbox"><label for="remember-me">Remember me</label>
<hr>
{{-- Form Actions --}}
<button type="submit" class="button">Sign in</button>
<a href="{{ route('forgot-password') }}">I forgot my password</a>
<a class="close-reveal-modal">×</a>
</div>
答案 0 :(得分:2)
如果您希望模态自动打开并设置true
(如果您不想打开它),则需要创建一个您将传递给视图的标志变量并将其设置为false
:
问题是->with()
不能与Redirect::back()
一起使用,所以我们需要一个解决方法:让我们将flag变量作为输入传递。为此,您必须获取所有旧输入并将新标志变量添加到它们。确保密钥(您的标志变量名称)尚不存在。您可以使用var_dump(Input::all())
进行检查。
$input = Input::all();//Get all the old input.
$input['autoOpenModal'] = 'true';//Add the auto open indicator flag as an input.
return Redirect::back()
->withErrors($this->messageBag)
->withInput($input);//Passing the old input and the flag.
现在,在您的视图中,您必须将此“旧”输入打印到JavaScript条件中。如果它存在,它将打印其值:true
,否则它将打印第二个参数:false
。
<script>
$(document).ready(function () {
if ({{ Input::old('autoOpenModal', 'false') }}) {
//JavaScript code that open up your modal.
}
});
</script>
答案 1 :(得分:0)
您可以在返回验证结果时return false;
。