Есть ли способ сделать частичное обновление страницы при отправке формы без написания JQuery в Laravel?

Я знаю как .NET, так и PHP, и, насколько я понимаю, EntityFramework в .NET — это то же самое, что Laravel в PHP.

в .NET у нас есть @using (Ajax.BeginForm что делает формы так же, как {!! Form::open в PHP.

@using (Ajax.BeginForm не обновляет всю страницу при отправке формы, и мне не нужно писать JQuery для этого. Итак, в основном это действует так же, как JQuery.ajax

Вопрос: Есть ли способ сделать частичное обновление страницы при отправке формы без написания JQuery в Laravel?

Бонусный вопрос
У нас также есть возможность передавать такие параметры, как onSuccess, OnComplete, OnBegin и param для передачи класса css формы. Можем ли мы сделать это в Laravel. Это возможно в Entity Framework в .NET

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 подайте заявку и сообщите МОК о нашем новом фасаде и поставщике:

Найти providers массив и добавить это в конце:

MyVendor\AjaxForm\AjaxForm::class

Затем в массиве Фасады добавьте это в конце:

'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()}}
1

Другие решения

Других решений пока нет …