Laravel-admin: Safari浏览器form界面保存超时

Created on 16 Aug 2018  ·  4Comments  ·  Source: z-song/laravel-admin

  • Laravel Version: 5.5
  • PHP Version: 7.1.18
  • Laravel-admin: 1.5.14

  • Mac OS High Sierra 10.13.6

  • Safari 11.1.2 (13605.3.8)

Description:

打开表单编辑页面,修改后点『保存』,在Safari浏览器中一直处于loading状态,无法成功save。

Steps To Reproduce:

debug后
发现Nginx 日志在大约1分钟后报408 timeout超时错误。
Safari的开发者模式下看到post的地址和payload都正常
以上问题在Iphone x的Safari同样能重现

日志
xx.xx.xx.xx - - [16/Aug/2018:11:32:16 +0800] "POST /admin/posts/35286 HTTP/1.1" 408 0 "http://domain/admin/posts/35286/edit" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15" "-"

Safari截图
1534391201824

Most helpful comment

我也遇到了 #2085
暫時解決方法
Admin::script("$('form').attr('pjax-container', null)");

All 4 comments

1.5.18没有这个问题

@qzd1989 更新到1.5.18重新测试了一下,问题仍然存在。
多了一点发现,当form中存在image字段时才会有问题。
如编辑用户(包含头像字段 image)
/admin/auth/users/1/edit
点保存时仍然一直loading

但编辑权限(无image字段)
/admin/auth/roles/1/edit
则可以保存成功。

通过注释源码UserController的第103行头像字段后可以证实

    /**
     * Make a form builder.
     *
     * @return Form
     */
    public function form()
    {
        return Administrator::form(function (Form $form) {
            $form->display('id', 'ID');

            $form->text('username', trans('admin.username'))->rules('required');
            $form->text('name', trans('admin.name'))->rules('required');
            // $form->image('avatar', trans('admin.avatar'));
            $form->password('password', trans('admin.password'))->rules('required|confirmed');
            $form->password('password_confirmation', trans('admin.password_confirmation'))->rules('required')
                ->default(function ($form) {
                    return $form->model()->password;
                });

            $form->ignore(['password_confirmation']);

            $form->multipleSelect('roles', trans('admin.roles'))->options(Role::all()->pluck('name', 'id'));
            $form->multipleSelect('permissions', trans('admin.permissions'))->options(Permission::all()->pluck('name', 'id'));

            $form->display('created_at', trans('admin.created_at'));
            $form->display('updated_at', trans('admin.updated_at'));

            $form->saving(function (Form $form) {
                if ($form->password && $form->model()->password != $form->password) {
                    $form->password = bcrypt($form->password);
                }
            });
        });
    }
}

我也遇到了 #2085
暫時解決方法
Admin::script("$('form').attr('pjax-container', null)");

Was this page helpful?
0 / 5 - 0 ratings

Related issues

greentornado picture greentornado  ·  3Comments

donglianyou picture donglianyou  ·  3Comments

evans-kim picture evans-kim  ·  3Comments

piian picture piian  ·  3Comments

joernroeder picture joernroeder  ·  3Comments