使用相同的重定向分隔两个验证

时间:2013-11-10 21:42:29

标签: php laravel laravel-4

我是Laravel4世界的新手,我正在尝试将我的网站转换为laravel框架。但一开始我有一点问题。索引我有两个jquery模式:第一个用于singin,第二个用于注册。所以,我想当用户尝试登录并犯错误时向他显示错误。注册相同。但是当我以单身形式出错时,我会收到注册表格...我的英语很糟糕,所以这里是代码:

routes.php文件

Route::get('/', function()
{
     return View::make("index.index");
}
Route::post('/', array('as'=> 'singin', function()
{
    $data = Input::all();
    $rules = array(
        'username' => 'min:3',
        'password' => 'min:6'
    );
    $validation = Validator::make($data, $rules);
    if($validation->passes())
    {
        return View::make('users.main');
    }
    Input::flash();

    return Redirect::to('/')->withErrors($validation);
}));
Route::post('/', array('as'=> 'register', function()
{
    // same as previous function
]

index.blade.php

<div id="signin" class="reveal-modal" @if($errors->all())
style="display:block; visibility:visible;" @endif >
    <header class="reveal-modal-header">
        Sign in
    </header>
    <div class="cont">

        <div class="indication">
            Sign In
        </div>
        {{ Form::open(array(
            'route' => 'singin',
            'class' => 'signin')) }}
        <p class="clearfix">
            {{ Form::label('username', 'Username') }}
            {{ Form::text('username')}}
        </p>
        <p class="clearfix">

            {{ Form::label('password', 'Password') }}
            {{ Form::password('password')}}
        </p>
        <p class="without-label clearfix">
            {{ Form::submit('') }}
        </p>
        @if($errors->all())
        <div id="logindiverror" style="" class="alert alert-error">
        @foreach($errors->all('<li>:message</li>') as $message)
         {{ $message }}
        @endforeach
        </div>
        @endif

        {{ Form::close() }}
    </div>
    <a class="close-reveal-modal" id="close1" href="#">&#215;</a>
</div>

<div id="signup" class="reveal-modal" @if($errors->all())
style="display:block; visibility:visible;" @endif >>
    <header class="reveal-modal-header">
        Sign up
    </header>
    <div class="cont">
        <div class="indication">
            Register
        </div>
        {{ Form::open(array(
            'route' => 'register',
            'class' => 'signup')) }}

            <p class="clearfix">
                <em>(<abbr>*</abbr>) All fields are required</em>
            </p>
            <p class="clearfix">
                <label>Username:<abbr>*</abbr></label>
                {{ Form::text('username')}}
            </p>
            <p class="clearfix">
                <label>Email:<abbr>*</abbr></label>
                {{ Form::text('email') }}
            </p>
            <p class="clearfix">
                <label>Password:<abbr>*</abbr></label>
                {{ Form::password('password1'); }}
            </p>
            <p class="clearfix">
                <label>Password (repeat):<abbr>*</abbr></label>
                {{ Form::password('password2'); }}
            </p>

            <p class="checkboxes clearfix">
                <span class="niceCheck">{{ Form::checkbox('agree', '0') }}</span>
                I agree with LinkyPlanet Terms &amp; Privacy Policy
            </p>
        <p class="without-label clearfix">
            {{ Form::submit('') }}
        </p>

        @if($errors->all())
        <div id="logindiverror" style="" class="alert alert-error">
            @foreach($errors->all('<li>:message</li>') as $message)
            {{ $message }}
            @endforeach
        </div>
        @endif

        {{ Form::close() }}

    </div>
    <a class="close-reveal-modal" id="close2" href="#">&#215;</a>
</div>

所以,问题是当用户试图唱歌时,他在密码中犯了一个错误(传递短于6个字符),脚本将他重定向到索引并打开模态进行注册并显示错误,而不是在唱歌中模态。错误在哪里?

干杯:)

1 个答案:

答案 0 :(得分:1)

问题在于您使用相同的URI(/)和相同的方法(POST)有2条“不同”路线,但您不能。

只有第一个才能按优先顺序运作。这样的事情会更好:

Route::post('/singin', array('as'=> 'singin', function()
{

}));

Route::post('/register', array('as'=> 'register', function()
{

}));

或者您可以将其中一个保留在/上并更改另一个:

Route::post('/', array('as'=> 'singin', function()
{

}));

Route::post('/register', array('as'=> 'register', function()
{

}));

修改

您使用相同的名称(寄存器中的$ errors和登录)。如果两者都有一个视图,则需要使用不同的名称。你可以使用

return Redirect::to('/')->with('registerErrors', $validation->messages());

return Redirect::to('/')->with('signInErrors', $validation->messages());

但是对于tedirects他们将受到你的会话的约束,所以你必须这样做:

@if(Session::has('registerErrors'))
    <div id="logindiverror" style="" class="alert alert-error">
        @foreach(Session::get('registerErrors')->all('<li>:message</li>') as $message)
            {{ $message }}
        @endforeach
    </div>
@endif