2014-12-24 3 views
4

Я хочу вернуться в мою модальную форму редактирования диалога, чтобы показать ошибки проверки, но используя Redirect::back Я просто закончил страницу HTML без модального окна.Laravel, как перенаправить обратно в окно диалогового окна boostrap

Я использую 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> 

JQuery вызов BootstrapDialog

$(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 без диалога. Как перенаправить обратно в модальное окно?

UPDATE

добавил 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 

Это вновь открывает модальное окно, если произошла ошибка, но проце eds назад, если нет. Мне не нравится, как он закрывает и снова открывает модальный код, и ошибки проверки не передаются модально, поэтому я бы не рекомендовал делать это таким образом.

ответ

9

Я просто сделал что-то вроде этого. Вам нужно использовать только шаблоны клинков!

//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!

+0

Я попытаюсь использовать это решение, чтобы определить посетителя, чтобы открыть новый модальный. Он пытается открыть модальный для каждого участника в противном случае, потому что у меня есть список участников с кнопками редактирования на главной странице. – Phil

+0

Мне пришлось использовать Session: получить, чтобы получить переменную. Не уверен, как вам это удалось. Я обновил свой вопрос, чтобы показать, что я в конце концов сделал. Также мои сообщения об ошибках $ не перешли к моему модальному. Я задам новый вопрос, чтобы получить помощь в этом. – Phil

+0

Да, вы должны использовать Session :: get, потому что, когда вы используете Redirect, он перезапишет текущие флэш-сообщения и передаст их в $ old array. –

1

Похоже, что вам нужно условие в вашей точки зрения, чтобы открыть диалоговое окно, если будут обнаружены ошибки в работе сессии:

@if($errors->any()) 
    $('.btn.edit-attendee').click(); 
@endif 
+0

Очень полезно, но не работает, потому что он открыл модальный для каждой кнопки, который нарушает модальную функцию. Я не уверен, что есть способ запустить событие за тот, который я нажал ранее ... Также я думаю, что вы сделали опечатку заменой '.click' на' .trigger («click»); ' – Phil

+0

Я думаю, что могу использовать предложение @Zach вернуть посетителю_идентифицировать кнопку как-то – Phil

+1

oh gotcha ... относительно триггера, вы можете просто использовать .click, а также это ярлык в этом случае. – prograhammer

0

Единственное, что я мог думать, устанавливает что-то вроде этого:

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

Когда страница загружается запросом на получение, это значение будет установлено на "", так как Input::old('show') не установлен (ну, но установлен на ""). Затем, когда вы размещаете форму, измените значение этого входа в:

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

Так что, если/когда страница перенаправляет, значение этого скрытого входа будет установлен на «да» вместо «». Затем обработайте это в Javascript:

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

Надеюсь, что имеет смысл!

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> 

В мой контроллер я просто перенаправляется обратно к просмотру в обычном режиме.

Смежные вопросы