【问题标题】:Laravel Validation "required_without"Laravel 验证“required_without”
【发布时间】:2014-03-26 17:22:09
【问题描述】:

我似乎无法让“required_without”验证在 Laravel 4 上正常工作。我有一个包含三个字段的表单。我只希望用户提交一个播放器或一个铃声,而不是同时提交。

当我在“tournament_player”和“tournament_ringer”文本框中输入内容时,验证成功。

查看

        <h3>Add Player</h3>
            {{ Form::open(array('url'=>'members/tournament/addplayer', 'action' => 'post', 'class'=>'form-horizontal')) }}
            {{ form::hidden('user_id', Auth::user()->id) }}
            {{ form::hidden('tournament_id', $tournament->id) }}
            <div class="form-group{{ $errors->first('side2_p1', ' has-error') }}">
                <label class="col-sm-2 control-label col-sm-pad">Player</label>
                <div class="col-sm-5 col-sm-pad">
                    {{ Form::select('tournament_player', array('' => 'Choose...') + $users, 'key', array('class' => 'form-control input')) }}
                    {{ $errors->first('tournament_player', '<span class="help-block">:message</span>') }}
                </div>
                <div class="col-sm-4 col-sm-pad">
                    {{ Form::text('tournament_ringer', '', array('class' => 'form-control input', 'placeholder' => 'Ringer')) }}
                    {{ $errors->first('tournament_ringer', '<span class="help-block">:message</span>') }}
                </div>
            </div>
            <div class="form-group">
                <label for="gender" class="col-sm-2 control-label col-sm-pad">Bracket</label>
                <div class="col-sm-3 col-sm-pad">
                    {{ Form::selectRange('player_bracket', 1, ($tournament->size/2), '1', array('class' => 'form-control input')) }}
                    {{ $errors->first('player_bracket', '<span class="help-block">:message</span>') }}
                </div>
            </div>  
            {{ Form::submit('Add', array('class'=>'btn btn-success')) }}
            {{ Form::token() . Form::close() }}
        </div>

控制器

public function postAddPlayer()
{
    $validator = Validator::make(
        array(
            'tournament_player' => Input::get('tournament_player'), 
            'tournament_ringer' => Input::get('tournament_ringer')),
        array(
            'tournament_player' => 'required_without:tournament_ringer',  
            'tournament_ringer' => 'required_without:tournament_ringer'),
        array(
            'required_without' => 'You can only add a player OR a ringer.')
    );

    if ($validator->passes()) 
    {

        if(Input::has('tournament_player'))
        {
            $tournament = Tournamentplayers::addPlayer(Input::get('tournament_player'));
        }elseif(Input::has('tournament_ringer')){
            $tournament = Tournamentplayers::addRinger(Input::get('tournament_ringer'));
        }

    }else{
        return Redirect::to('members/tournament/'.Input::get('tournament_id').'/edit')
            ->withErrors($validator)
            ->withInput()
            ->with('message', 'Error! Something was wrong.')
            ->with('status', 'danger');
    }
}

【问题讨论】:

标签: php laravel laravel-4


【解决方案1】:

这是您代码中的错误吗?我看到你的规则中有'tournament_ringer' =&gt; 'required_without:tournament_ringer' - 你可能是说required_without:tournement_player

【讨论】:

  • 问题是 1.4 岁...不过你可能是对的。
【解决方案2】:

一个简单的解决方法是使用 XOR 语句而不是验证器:

if (Input::get('tournament_player') XOR Input::get('tournament_ringer')) {
    //Validator passes.
} else {
    //Create error message and redirect with it.
}

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 2018-08-15
    • 2021-12-09
    • 2021-03-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 2020-11-20
    相关资源
    最近更新 更多