Laravel Blade-View:使用Api Repsonse处理

时间:2019-01-19 14:33:28

标签: php laravel laravel-blade

假设我有一个简单的刀片视图表单,其中只有一个输入字段和一个提交按钮。在此字段中,您只需要写一个名字。之后,您需要单击提交按钮以进行api调用。

为简化起见,假设api调用是method:post和url:'api / user'

调用api在数据库中创建一个新用户,并使用json响应:

{
    "id": 1,
    "name": "Im a new user",
    "created_at": 20190119
} 

据我所知,是否实现了我的blade.view,如下所示:

<form method="POST" action="/api/user">
    @csrf
    <div class="form-group row">
        <label for="username"
               class="col-md-4 col-form-label text-md-right">{{ __('Name') }}</label>

        <div class="col-md-6">
            <input id="username" type="text"
                   class="form-control"
                   name="username" value="{{ old('username') }}" required autofocus>
        </div>
    </div>
    <div class="form-group row mb-0">
        <div class="col-md-8 offset-md-4">
            <button type="submit" class="btn btn-primary">
                {{ __('Create') }}
            </button>
        </div>
    </div>
</form>

我的页面显示响应。 我想要的是停留在实际视图上并将响应显示为警报,例如$ name。 “已创建”

Api路由(routes / api.php):

Route::post('/user', 'UserController@createUser');

路由配置(routes / web.php):

Route::get('/user' , function () {
return view('user/create-user');
});

我知道可以使用的解决方案

  • 重定向到同一页面(这意味着再次重新渲染同一页面,这并不是真正的责任-此解决方案导致重新加载整个页面)

  • 在UserController @ createUser方法中使用数据返回相同的视图(与上述相同,据我所知,api调用应使用json而不是视图进行响应)

我也可以通过例如使用Ajax jQuery的。如您所见,有很多解决方案,但是哪种是最好的。

在这种情况下,您可以说有最佳做法吗?

laravel提供了一些好的解决方案吗?

1 个答案:

答案 0 :(得分:0)

我认为您缺少一些内容,或者不妨进一步研究各个部分的组合方式。您的主要要求不是特别是Laravel项目:

  

我想要停留在实际视图中,并将响应显示为警报

问题的症结不是Laravel带来的“开箱即用”,它实际上不是Laravel的问题,而是我如何异步更新页面。为此,您可能最适合使用ajax请求和javascript / jQuery警报。

我可能会这样:

$('#submitButton').on('click', function (e) {
        e.preventDefault(); // Want to stay on the page, not go through normal form  
        // Might be easier to make this a NON submit button - then we can use the rest below and not have to js submit()
        // Grab any extra info via data.
        var item_type = $(this).data('item-type');
        var name = $(this).val();
        $.ajax({
            url: "{{url('user/create/')}}",
            type: "POST",
            data: {
                item_type: item_type,
                name: name
            },
            success: function (name) {
                alert(message);
                // Or, if you want a better looking alert, you can use a library like SWAL:
               swal("Success!", "New user created with a name of: "+name, "success");
            },
            error: function () {
                swal("Error", "Unable to bring up the dialog.", "error");
            }
        });
    });

您需要在控制器中处理ajax数据,并仅在控制器方法的return语句中发送回名称。

如果您想更改上面的表单并且不通过警报来执行此操作,请在成功函数中使用jQuery进行更改(例如$("#name").text(name);或类似的内容。