Javascript 引导模式下的Laravel 4验证

Javascript 引导模式下的Laravel 4验证,javascript,php,twitter-bootstrap,laravel,laravel-4,Javascript,Php,Twitter Bootstrap,Laravel,Laravel 4,我是Laravel4的新手,我正在尝试在bootstrap模式中进行表单验证。 我的模式有一个带有文本输入和提交按钮的表单,我希望在验证失败时,模式向我显示错误。 但在验证和页面刷新之后,模式将关闭。 以下是来自控制器和视图的代码: 控制器代码: public function postAvatar() { $avatar_rules = array( 'avatar_src' => 'url', ); $v

我是Laravel4的新手,我正在尝试在bootstrap模式中进行表单验证。 我的模式有一个带有文本输入和提交按钮的表单,我希望在验证失败时,模式向我显示错误。 但在验证和页面刷新之后,模式将关闭。 以下是来自控制器和视图的代码:
控制器代码:

    public function postAvatar()
{
        $avatar_rules = array(
            'avatar_src' => 'url',

        );
        $validator = Validator::make(Input::all(), $avatar_rules);
        $validator->setAttributeNames(User::$names_attr); 

        if ($validator->passes()) 
        {                
        $avatar_src = (Input::get('avatar_src'))? Input::get('avatar_src') : URL::asset('assets/images/user/default-user-avatar.png');
        $user = User::find(Auth::id());
        $user->avatar_src = $avatar_src;

        if ($user){
         return Redirect::to('dashboard')->withSuccess("Success: avatar updated.");  
        }
        return Redirect::to('dashboard')->withError("Error: an error has occurred.");
        }
        return Redirect::back()->withErrors($validator);                
    }
public function postAvatar()
{
        $avatar_rules = array(
            'avatar_src' => 'url',

        );
        $validator = Validator::make(Input::all(), $avatar_rules);
        $validator->setAttributeNames(User::$names_attr); 

        if ($validator->passes()) 
        {                
        $avatar_src = (Input::has('avatar_src'))? Input::get('avatar_src') : URL::asset('assets/images/user/default-user-avatar.png');
        $user = User::find(Auth::id());
        $user->avatar_src = $avatar_src;

        if ($user->save()){
         if(Request::ajax()){
           return Response::json(array('success' => true));
        }
        }
        return Redirect::to('dashboard')->withError("Error: an error has occurred.");
        }
            return Response::json(array('errors' => $validator->errors()->toArray()));
        }
查看代码:

    <!-- Modal -->
<div class="modal fade" id="avatarModal" tabindex="-1" role="dialog" aria-labelledby="avatarModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
        <h4 class="modal-title" id="avatarModalLabel">Update avatar</h4>
      </div>
      <div class="modal-body">
          <h4><span class="label label-info">Current avatar</span></h4>
          <img class="img-circle img-responsive dashboard-avatar" src="{{ $user->avatar_src }}" alt="{{ $user->username }} avatar">     
          <div class="divider"></div>
          <h4><span class="label label-info">New avatar</span></h4>
          {{ Form::open(array('url' => 'dashboard/avatar', 'method'=>'post', 'role'=>'form')) }}
            <ul>
                @foreach($errors->all() as $error)
                <div class="alert alert-danger" role="alert">{{ $error }}</div>
                @endforeach
            </ul>          
          <div class="form-group">
            <label for="avatar_src" class="control-label">Link avatar</label>
            <input type="text" name="avatar_src" class="form-control" id="avatar_src" placeholder="Link of avatar image url">
          </div>     
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="submit" class="btn btn-primary">Update</button>
      </div>
         {{ Form::close() }}       
    </div>
  </div>
</div>
<!-- Modal -->
<div class="modal fade" id="avatarModal" tabindex="-1" role="dialog" aria-labelledby="avatarModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
        <h4 class="modal-title" id="avatarModalLabel">Update avatar</h4>
      </div>
      <div class="modal-body">
          <h4><span class="label label-info">Current avatar</span></h4>
          <img class="img-circle img-responsive dashboard-avatar" src="{{ $user->avatar_src }}" alt="{{ $user->username }} avatar">     
          <div class="divider"></div>
          <h4><span class="label label-info">New avatar</span></h4>
          {{ Form::open(array('url' => 'dashboard/avatar', 'id'=>'avatar_form', 'method'=>'post', 'role'=>'form')) }}
          <div class="alert alert-danger avatar_alert" role="alert" style="display: none">
              <ul></ul>
          </div>
            <ul>
            </ul>          
          <div class="form-group">
            <label for="avatar_src" class="control-label">Link avatar</label>
            <input type="text" name="avatar_src" class="form-control s_tooltip" id="avatar_src" placeholder="Avatar image links">
          </div>     
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="submit" class="btn btn-primary">Update</button>
      </div>
         {{ Form::close() }}       
    </div>
  </div>
</div>
查看代码:

    <!-- Modal -->
<div class="modal fade" id="avatarModal" tabindex="-1" role="dialog" aria-labelledby="avatarModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
        <h4 class="modal-title" id="avatarModalLabel">Update avatar</h4>
      </div>
      <div class="modal-body">
          <h4><span class="label label-info">Current avatar</span></h4>
          <img class="img-circle img-responsive dashboard-avatar" src="{{ $user->avatar_src }}" alt="{{ $user->username }} avatar">     
          <div class="divider"></div>
          <h4><span class="label label-info">New avatar</span></h4>
          {{ Form::open(array('url' => 'dashboard/avatar', 'method'=>'post', 'role'=>'form')) }}
            <ul>
                @foreach($errors->all() as $error)
                <div class="alert alert-danger" role="alert">{{ $error }}</div>
                @endforeach
            </ul>          
          <div class="form-group">
            <label for="avatar_src" class="control-label">Link avatar</label>
            <input type="text" name="avatar_src" class="form-control" id="avatar_src" placeholder="Link of avatar image url">
          </div>     
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="submit" class="btn btn-primary">Update</button>
      </div>
         {{ Form::close() }}       
    </div>
  </div>
</div>
<!-- Modal -->
<div class="modal fade" id="avatarModal" tabindex="-1" role="dialog" aria-labelledby="avatarModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
        <h4 class="modal-title" id="avatarModalLabel">Update avatar</h4>
      </div>
      <div class="modal-body">
          <h4><span class="label label-info">Current avatar</span></h4>
          <img class="img-circle img-responsive dashboard-avatar" src="{{ $user->avatar_src }}" alt="{{ $user->username }} avatar">     
          <div class="divider"></div>
          <h4><span class="label label-info">New avatar</span></h4>
          {{ Form::open(array('url' => 'dashboard/avatar', 'id'=>'avatar_form', 'method'=>'post', 'role'=>'form')) }}
          <div class="alert alert-danger avatar_alert" role="alert" style="display: none">
              <ul></ul>
          </div>
            <ul>
            </ul>          
          <div class="form-group">
            <label for="avatar_src" class="control-label">Link avatar</label>
            <input type="text" name="avatar_src" class="form-control s_tooltip" id="avatar_src" placeholder="Avatar image links">
          </div>     
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="submit" class="btn btn-primary">Update</button>
      </div>
         {{ Form::close() }}       
    </div>
  </div>
</div>

&时代;接近
更新头像
当前化身
头像}“alt=“{{$user->username}}}}头像”>
新化身
{Form::open(数组('url'=>'仪表板/化身','id'=>'化身形式','method'=>'帖子','role'=>'Form'))}
    链接化身 接近 更新 {{Form::close()}}
    阿贾克斯:

    
    $(文档)。在('submit','avatar_form',函数(事件){
    变量信息=$('.avatar_alert');
    event.preventDefault();
    var data={avatar_src:$(“#avatar_src”).val()}
    $.ajax({
    url:“/dashboard/avatar”,
    类型:“POST”,
    数据:数据,
    }).完成(功能(响应){
    info.hide().find('ul').empty();
    if(response.errors)
    {
    $.each(response.errors,函数(index,error){
    info.find('ul').append(错误);
    });
    info.slideDown();
    }
    else if(response.success){
    window.location.href=“/dashboard”;
    }
    });
    });
    
    最好的办法是通过AJAX验证表单,以避免完全重新加载页面。然后检查AJAX请求的响应是否存在错误,并在模式中显示错误(如果存在)

    您还可以添加客户端验证,以防止在满足规则之前发出请求。我不建议使用此方法代替服务器端验证,但使用它通常是非常可取的

    要实现这一点,您需要按照以下思路做一些事情:

    Javascript:

    捕获表单的提交事件并发出AJAX请求

    $(document).on('submit', 'form', function(event){
        event.preventDefault();
    
        var data = { avatar_src: $("#avatar_src").val(); };
    
        $.ajax({
            url: "/dashboard/avatar",
            data: data
            type: "POST",
        }).done(function(response) {
            if(response.errors)
            {
                // Add error to Modal Body
            }
            else
            {
                // Show success message, close modal?
            }
        });
    });
    
    后端:

    修改控制器方法以检测当前请求是否为AJAX请求,如果是,则以JSON格式返回响应,而不是重定向。例如:

    if(Request::ajax())
    {
        return Response::json(array('errors' => $validator->messages()));
    }
    else
    {
        return Redirect::back()->withErrors($validator);
    }
    

    我没有测试过任何代码,所以可能包含一些打字错误,但希望这能帮助您!

    我也面临同样的问题。在互联网上进行研究后,我发现Laravel不支持success(“success_msg”)方法

    以下是有关此主题的完整讨论:

    但您可以通过以下方法处理此问题:-

    -对于错误消息:-

    [必须在控制器中添加代码]

    $success_msg='your success message.';
    Session::flash('successMsg', $success_msg);
    return Redirect::to('view');
    
    return Redirect::to('view')->withErrors('your error message');

    [必须在视图中添加代码]

    @if(isset($errors) && count($errors->all())>0)
    <ul>
    @foreach($errors->all() as $error)
    <li>{{ $error }}</li>
    @endforeach
    </ul>
    @endif
    
    @if (Session::has('successMsg'))
    {{ Session::get('successMsg') }}
    @endif
    
    [必须在视图中添加代码]

    @if(isset($errors) && count($errors->all())>0)
    <ul>
    @foreach($errors->all() as $error)
    <li>{{ $error }}</li>
    @endforeach
    </ul>
    @endif
    
    @if (Session::has('successMsg'))
    {{ Session::get('successMsg') }}
    @endif
    
    这种方法对我很有效。
    为了更好地显示您的错误,您可以使用引导css。

    我正在尝试,但无事可做。我将后端代码添加到我的控制器。我也是Ajax和javascript的新手。我需要更改
    $(文档)。on('submit','form',function(event){
    $(document)。on('submit','name of my form//',function(event){
    ,对吗?是的,最简单的方法是给表单一个ID,然后将“form”更改为“#”。我这样做了,但当验证失败时,模式仍然关闭。我从ajax收到了请求,但控制台日志显示“POST 400(错误请求)“让我们看看您的AJAX请求。您是否正在从表单中传递需要传递的数据?我已经使用引导和
    return Redirect::to('controller')->with Success('Success message')
    工作正常。您是否可以在此处共享您的代码,因为在我的项目中,with Success方法不起作用。我使用
    return Redirect::to('controller\u name'))->使用Success(“Success:Success message.”);
    ,然后我检查“layout.blade.php”中是否设置了名为“Success”的会话:
    @if(session::get('Success')){{session::get('Success')}

    @endif
    谢谢@Aptscript。在Witheros中,不需要从会话访问错误消息,但在withSuccess方法中,我们必须从会话varibale获取消息。不客气。是的,
    withErrors
    是Laravel的本机函数,
    withSuccess
    更像是一个自制函数。