验证重定向后保持模态打开

时间:2014-03-31 00:21:13

标签: php laravel zurb-foundation

我目前正在开发一个项目,其中登录/注册是通过模态框处理的(所以我点击登录按钮,一个漂亮的模态显示一个表格)。

我使用基础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">&#215;</a>

</div>

2 个答案:

答案 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;