取消模态引导程序窗口后的Laravel处理/重定向

时间:2016-03-12 12:15:45

标签: php laravel bootstrap-modal laravel-5.2 laravel-blade

在Laravel中,我有一个表,其中包含每行的编辑链接,如下所示;

<a data-toggle="modal" href="{{ route('myrow.edit', ['id' => $value['id']]) }}" data-target="#myModal">
    <i class="fa fa-btn fa-pencil"></i>
</a>

模态屏幕定义如下;

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content"></div>
    </div>
</div>

当点击前面提到的按钮时,包含的edit.blade.php看起来像这样;

<div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
    <h4 class="modal-title">My modal title</h4>
</div>
{!! Form::model($myrow, array('route' => array('mycontroller.update', $myrow->id), 'method' => 'PUT')) !!}
    <div class="modal-body">
        <!-- All kinds of fields -->
    </div>
    <div class="modal-footer">
    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button class="btn btn-success" type="submit">Save</button>
    </div>
{!! Form::close() !!} 

调用的mycontroller.update看起来像这样;

public function update(Request $request, $id) {
        $mymodel = MyModel::find($id);
        $mymodel->user = $request->user()->id;
        $mymodel->field = $request->field;
        if (!$mymodel->save()) {
                    $errors = $mymodel->getErrors();
                    return redirect()
                                ->action('MyController@index')
                                ->with('errors', $errors)
                                ->withInput();
                }
                return redirect()
                    ->action('MyController@index')
                    ->with('message', $mymodel->field . ' was added');
}

当我在模态屏幕中填写数据并提交时,一切都很顺利。当我按下取消时按下&#34; x&#34;关闭模态或只是单击模态外部。在那些情况下,模态显然会关闭,但当我单击任何其他行中的编辑链接时,它将始终打开以前未保存行的模态屏幕,直到我刷新屏幕。

显然我需要在模态窗口以任何方式关闭后进行一些处理,但我应该怎么做。有人有一个很好的策略吗?

更新:它也不会执行第二次GET请求。我第一次点击编辑链接时,它会检索正确的数据     获取https://example.com/mylaravelapp/mymodel/1/edit 第二个(以及任何后续)时间根本没有请求。

2 个答案:

答案 0 :(得分:0)

您需要使用JavaScript清除表单字段并根据您单击的行重新填充它们。该模式在关闭后仍然存在于Dom中,这就是为什么您看到之前输入的值

答案 1 :(得分:0)

Bootstrap Modal的引用存在问题。您正在创建一个独特的模态。切换模态的按钮使用data-target="#myModal"属性来引用单击按钮时弹出的html。 html的那部分由id="myModal"标识。 所以,如果你想创建多个模态,你需要这样的东西:

  • 更改数据目标属性的值
<a data-toggle="modal" href="{{ route('myrow.edit', ['id' => $value['id']]) }}" data-target="#myModal_{{$value['id']}}">
    <i class="fa fa-btn fa-pencil"></i>
</a>
  • 然后编辑模态的html定义
<div class="modal fade" id="myModal_{{$value['id']}}" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content"></div>
    </div>
</div>

但是,你不应该创建多个模态;您必须只创建一个模态,并使用Javascript更新模态内容并形成操作属性。