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

1

セッションでエラーが見つかった場合にダイアログを開くには、ビューに条件が必要なようです。

@if($errors->any())
  $('.btn.edit-attendee').click();
@endif
于 2014-12-24T16:21:24.050 に答える
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 に答える
0

私が考えることができる唯一のことは、次のようなものを設定することです:

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

ページが get 要求によって読み込まれると、この値は "" に設定されますInput::old('show')(設定されていません)。次に、フォームを投稿するときに、この入力の値を次のように変更します。

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

そのため、ページがリダイレクトされた場合、この隠し入力の値は "" ではなく "yes" に設定されます。次に、それを Javascript で処理します。

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

それが理にかなっていることを願っています!

于 2014-12-24T17:05:26.163 に答える