有没有办法在表单提交上进行部分页面刷新而不在Laravel中编写JQuery?

时间:2016-04-30 17:55:02

标签: php asp.net-mvc-3 asp.net-mvc-4 laravel-5.1 laravel-5.2

我知道.NET和PHP,根据我的理解,.NET中的EntityFramework与PHP中的Laravel相同。

在.NET中,我们@using (Ajax.BeginForm在PHP中呈现与{!! Form::open相同的表单。

@using (Ajax.BeginForm不刷新表单提交的整个页面,我不需要编写JQuery来执行此操作。所以,它基本上与JQuery.ajax

相同

问题:有没有办法在表格提交上进行部分页面刷新而不在Laravel中编写JQuery?

奖金问题 我们还可以选择传递诸如onSuccess,OnComplete,OnBegin和param之类的参数来传递表单css类。我们可以在Laravel这样做吗?这在.NET中的实体框架中是可能的

1 个答案:

答案 0 :(得分:1)

简单地说:不。

但是,您可以创建自己的包来为您执行此操作。

创建一个简单的类来打开和关闭表单:

namespace Ajaxform;
Class AjaxForm {

    public function begin($action, $method, $options){
        //do other stuff with options, minimal example
        return '<form action="'.$action.'" method="'.$method.'" data-ajax-form/>';
    }
    public function end(){
        return '</form>';
    }
}

然后创建Facade访问者:

namespace AjaxForm\Facades;
Class AjaxFormFacade extends Illuminate\Support\Facades\Facade{
    public static function getFacadeAccessor(){
        return 'ajaxform';
    }
}

然后创建一个服务提供程序,将我们的外观绑定到应用程序:

namespace AjaxForm\Providers;
public function AjaxFormServiceProvider {

    public function bind(){
        $this->publishes([
            __DIR__.'/../assets/' => public_path('vendor/ajaxform')
        ], 'public');
    }

    public function register(){
        $this->app->bind('ajaxform', function(){
            return new AjaxForm;
        }
    }
}

您的供应商包装看起来像这样:

MyVendor (replace this with whatever you want)
    - Src
        - AjaxForm
            - assets
                 ajax-form.js
            - Facades
                 AjaxFormFacade.php
            - Providers
                 AjaxFormServiceProvider.php
            AjaxForm.php

您的composer.json将在AjaxForm内直接显示(父级,位于Src目录之前)

{
    "name": "myvendor/ajax-form",
    "version" : "master",
    "description": "An Ajax Form Wrapper.",
    "license" : "MIT",
    "keywords": ["ajaxform"],
    "authors" : [
        {
            "name": "My Name",
            "email": "wheredoigetahold@of.you"
        }
    ],
    "require": {
        "php": ">=5.5",
        "illuminate/support": "4.*|5.*"
    },
    "autoload": {
        "psr-4": {
            "Ajaxform\\": "src/AjaxForm/"
        }
    },
  "minimum-stability": "stable"
}

既然您已经创建了供应商包,请将其添加到config/app.php文件中,并告诉IOC我们的新外观和提供商:

找到providers数组并在最后添加:

MyVendor\AjaxForm\AjaxForm::class

然后在Facades数组中,在最后添加:

'AjaxForm' => 'MyVendor\AjaxForm\AjaxForm::class

现在您只需要创建ajax-form.js文件,该文件将具有我们用于表示形式的逻辑。

jQuery(function($){
    $('form[data-ajax-form]').on('submit', function(e){
        e.preventDefault();
        var $this = $(this);

        $.ajax({
            method: $this.prop('method'),
            url: $this.prop('action'),
            data: $this.serialize()
        }).done(function(resp){
            //put some logic here
        }).error(function(err){
            //put some logic here
        });
    });
});

现在您已准备好致电您的表单:

{{AjaxForm::begin(route('path.to.my.endpoint'), 'POST') }}
    //form inputs go in here
{{AjaxForm::end()}}