8

我想返回到我的模态对话框编辑表单以显示验证错误,但使用Redirect::back我只是在没有模态窗口的 HTML 页面上结束。

我使用BootstrapDialog 将我的attendee.edit路线加载到一个弹出编辑表单的模式对话框中。

HTML

<td>{{link_to_route('attendee.edit','',array($attendee->id), array(
        'class'=>'edit-attendee btn btn-info btn-xs glyphicon glyphicon-pencil',
        'data-title' => 'Edit Attendee'))}} 
</td>

对 BootstrapDialog 的 JQuery 调用

$(document).ready(function(){
    $('.btn.edit-attendee').click(function(e){
        e.preventDefault();
        url = $(this).attr('href');
        BootstrapDialog.show({
            title: $(this).data('title'),
            message: $('<div></div>').load(url),
            buttons: [{
                label: 'Update',
                action: function(dialogRef) {
                    $('form').submit();
                }
            }]
        });
    });
});

控制器

public function update($id)
{
    $attendee = Attendee::findOrFail($id);

    $validator = Validator::make($data = Input::all(), Attendee::$rules);

    if ($validator->fails())
    {
        return Redirect::back()->withErrors($validator)->withInput();
    }

    $attendee->update($data);

    return Redirect::route('attendees.index');
}

编辑完表单后,我想返回模态窗口以显示验证错误,但我只是在没有对话框的 HTML 页面上结束。如何重定向回模态窗口?

更新

添加id到控制器返回

return Redirect::back()->withErrors($validator)->withInput()->with('id', $id);

添加了jQuery

  @if(!empty(Session::get('id')))

    $(document).ready(function(){
            url = "{{ URL('attendee') . '/' . Session::get('id'). '/edit' }}";
            BootstrapDialog.show({
                title: $(this).data('title'),
                message: $('<div></div>').load(url),
                buttons: [{
                    label: 'Update',
                    action: function(dialogRef) {
                        $('form').submit();
                    }
                }]
            });
    });

    @endif

如果出现错误,这将重新打开模态窗口,但如果没有则继续返回。我不喜欢它如何关闭和重新打开模态,并且验证错误不会传递给模态,所以我不建议这样做。

4

4 回答 4

18

我只是做了这样的事情。你只需要使用刀片的模板!

//pass back a variable when redirecting
return Redirect::back()->with('error_code', 5);

然后在您的刀片模板中:

@if(!empty(Session::get('error_code')) && Session::get('error_code') == 5)
<script>
$(function() {
    $('#myModal').modal('show');
});
</script>
@endif

只要存在 error_code 并且等于 5,这将打开对话框!

于 2014-12-24T17:27:05.680 回答
1

这对我有用。

在我的模态中:

<div class="modal-content">
@if (count($errors) > 0)
    <div class="alert alert-danger">
        <strong>Error</strong><br><br>
        <ul>
            @foreach ($errors->all() as $error)
               <li>{{ $error }}</li>
            @endforeach
        </ul>
  </div>
@endif
<div class="modal-body">
.... rest of modal window code

在我看来:

<script type="text/javascript">
    @if (count($errors) > 0)
        $('#modal').modal('show');
    @endif
</script>

在我的控制器中,我只是像往常一样重定向回视图。

于 2015-04-13T03:34:46.083 回答
1

如果在会话中发现错误,听起来您需要在视图中打开对话框:

@if($errors->any())
  $('.btn.edit-attendee').click();
@endif
于 2014-12-24T16:21:24.050 回答
0

The only thing I could think of is setting something like this:

`<input type="hidden" name="show" value="{{ Input::old('show') ? Input::old('show'):"" }}" />` 

When the page is loaded by a get request, this value will be set to "", as Input::old('show') isn't set (well is but is set to ""). Then, when you post the form, change the value of this input to:

$("input[name=show"]").val("yes");

So that if/when the page redirects, the value of this hidden input will be set to "yes" instead of "". Then, handle that in Javascript:

$(document).ready(function(){
  if($("input[name=show]").val() != "")){
    $('#modal_id').modal('show');
  }
});

Hope that makes sense!

于 2014-12-24T17:05:26.163 回答